1.有一个数组int[] arr={1,2,3,4,5};
//通过arr[5]=4; 会出现什么结果
答:报异常:数组下标越界异常
改:
arr=null;
arr[5]=4;
结果:null1是空的意思。
当通过arr找不到保存的数组地址时,会爆出空指针异常。
异常是错误,程序一旦发生异常,会立刻终止
所以这里只会爆出空指针异常。
2.有一个数组 short[] s=new short[9]
假设数组的地址是1234,问最后一个元素的地址是:1244
(因为数据类型是short,一次两个字节)
3.只能用对象干活吗?对
Dog.play();-- 这里是在使用类名直接调用方法,实际是在用字节码文件对象掉用方法。
Person p=new Person();
p.eat();
3.可变参数
可以接收多个类型相同的实参,个数不限,使用方式与数组相同。
在调用方法的时候, 实参的数量可以写任意多个。
作用:简化代码,简化操作等。
注意点:
1.给可变参数传值的实参可以直接写,个数不限制,内部会自动的将他们放入可变数组中.
2.当包括可变参数在内有多个参数时,可变参数必须放在最后面,并且一个方法中最多只能有一个可变参数
3.当可变参数的方法与固定参数的方法是重载关系时,调用的顺序,固定参数的优先于可变参数的.
4.如果同时出现两个重载方法,一个参数是可变参数,一个是第一个是固定参数, 后面是可变参数.
我们就不能使用下面的方法调用.两个方法都不能使用。
4.匿名对象
-
定义
匿名对象就是没有名字的对象 因为没有名字,所以当我们想使用匿名对象实现功能时,只能在创建对象的这个时刻使用一次.一 旦使用完毕,这个对象我们就再也无法调用,变成了垃圾.系统会通过垃圾回收机制在某个时刻进 行内存回收---(垃圾回收机制在JVM处会讲).
-
作用
内存很宝贵,使用匿名对象可以更好的使用内存(随用随建,用完更快回收内存),节省内存
5.多引用指向一个对象
原理说明
对象和数组都是引用数据类型,都是通过栈区中的引用(变量)保存堆区中的对象地址,所以当我们让多个引用同时保存一个对象的地址,通过任何一个变量都可以访问这个对象(这就是前面讲 过的址传递的原理)
6.成员变量
变量分类
-
使用关键字static修饰的属性、方法,被称为静态属性、静态方法。
-
没有使用关键字static修饰的属性、方法, 被称为非静态属性、非静态方法, 又被称为实例属性、实例方法。
空间分配
-
静态的成员是属于类的,在类第一次被加载到内存中的时候,就已经分配空间了。
-
非静态的成员是属于对象的,在实例化对象的时候分配空间。
访问
-
静态成员需要使用类访问,非静态成员需要使用对象访问。
-
静态方法中可以直接访问本类中的静态成员,不能直接访问本类中的非静态成员。
-
非静态方法中可以直接访问本类中的静态成员,也可以直接访问本类中的非静态成员。
成员变量的特点:(这里特指非静态成员)(面试题)
1.在创建对象的时候会赋默认值
2.可以在类中定义变量的时候,直接赋值
3.非静态的成员变量可以在除了static修饰的方法外任何地方使用.
成员变量和局部变量的区别:(面试题)
1.作用域:成员变量是整个对象.局部变量是从定义开始到所在的函数/if/for结束
2.默认值:成员变量会有默认值,局部变量没有默认值,要想使用必须先赋值
3.释放机制:成员变量跟对象保持一致,通过垃圾回收机制回收,局部变量使用完立即释放
4.存放的位置:成员变量放在堆区中的对象中,局部变量放在栈区中的方法中.
7.static关键字
static定义
是一个关键字,被static修饰的成员就变成了静态的.具有保值功能
温馨提醒
如果某些属性是属于不同的对象, 每一个对象的值都不同, 可以设计为非静态。 例如人的名字。
如果某些属性是可以被所有的对象共享的, 每一个对象看到的值都是相同的, 可以设计为静 态。例如对象的数量。
class Student{ int age;//非静态成员变量 static int height;//静态成员变量 //静态方法 public static void jump(){ System.out.println("jump"); } } public class Demo2 { public static void main(String[] args) { Student s = new Student(); s.age = 10;//引用调用非静态的成员变量 //s.height = 23;//引用调用静态的成员变量 //Student.age = 20;//类名不能调用非静态成员 Student.height = 20;//类名只能直接调用静态成员 Student.jump();//类名调用静态方法 } }
8.this关键字
概念
是一种引用数据类型,本身是一个关键字,用在类的实例方法或者构造方法中,代表的是当前的对 象,保存的是当前对象的地址 。
场景:当我们想在当前类的内部拿到当前对象的引用时,可以使用this 。
this的功能总结: 1.用来区分成员变量和局部变量 2.可以在构造方法内部调用其他重载的构造方法,提高代码的复用性,简化代码(具体实现见 构造方法小节)。
区分成员变量和局部变量
在类中, 使用方法时,为了更好的表示参数代表的成员变量意思,我们会将参数的名字和对应成 员变量的名字一致。 此时, 如果在方法内部直接使用名字来访问, 根据就近原则(在内存中 离方法的远近判断)优先访问的是局部变量(参数)。 因此, 需要使用this关键字表示对当前对 象的引用,访问成员变量,因为使用this访问的一定成员变量。
this关键字的省略
当需要访问的属性与局部变量没有重名的时候, this关键字可以写, 也可以不写。 当需要访问的属性与局部变量重名的时候, this关键字必须写, 不可以省略。
9.构造方法
概念
构造方法, 其实也是一个方法。 用于实例化对象, 在实例化对象的时候调用
和普通的方法的区别
-
构造方法的名字,必须和类名一致。
-
构造方法没有返回值,返回值类型部分不用写。
构造方法的意义
一般情况下,使用构造方法,是为了在实例化对象的同时,给一些属性进行初始化赋值。
构造方法的注意事项
-
如果一个类中没有写构造方法, 系统会自动提供一个public权限的无参构造方法, 以便 实例化对象。
-
如果一个类中写构造方法了, 此时系统将不再提供任何的默认的构造方法。
-
多个构造方法之间是重载的关系
this在构造方法中的使用
注意点总结:
-
1.不能自己调用自己---死循环
-
2.不能相互调用----死循环
-
3.this充当构造方法时,必须放在第一行
-
4.this在作为方法的时候,只能充当构造方法,不能作为其他方法
-
5.this的使用范围就是当前类的内部
-
6.只有在非静态方法中,才可以使用