11.装箱与拆箱
装箱:将基本类型用对应的引用类型包装起来;
拆箱:将包装类型转换为基本类型;
int → Integer 装箱 Integer → int 拆箱
12.静态:static
特性:
- static可以修饰成员变量和成员方法。
- 在类加载时加载,类消亡时消亡。
- 当成员被静态修饰后,除了可以被对象调用,还可以通过类名.静态成员的方式调用,即不需要创建对象也可调用。
- 所有对象共享静态成员
在一个静态方法内调用非静态成员是否可行?
不可行,因为静态方法可以不用创建对象,直接调用。即静态成员优先于对象存在,允许在没有创建对象时访问静态成员。这也就是说由于静态成员生命周期与类同步,实例变量生命周期与对象同步,所以我们有可能能够访问到静态成员,但是访问不到非静态成员。因此在静态方法里不允许调用其他非静态变量,也不可以访问非静态方法。
但非静态方法既可以访问静态成员也可以访问非静态成员
实例变量与静态变量(类变量)
1.存放位置
静态变量在类加载后存放在方法区中,实例变量在对象创建后存放在堆中。
2.生命周期
静态变量随类加载而加载,随类消亡而消亡。生命周期最长。
实例变量随对象消亡而消亡。
使用静态的好处
可以直接被类名调用,节省存储空间(所有对象共享一个,无需每个对象保存一份)。
顺便说下缺点,即生命周期过长,访问局限性大
tips:
- 静态方法优先于对象,所以需要对对象操作的功能就都不能用了。比如静态方法中不可以有this和super关键字
- main()一般是静态的。
13.成员变量与局部变量
- 从语法形式上看,成员变量属于类,局部变量是方法的参数或方法定义的变量。成员变量可以被public private static等修饰符修饰,局部变量不能用访问控制修饰符和static修饰(注意即使在静态方法中也不能用static修饰成员变量,因为修饰了也没有意义,本来方法中的参数和变量就是为方法服务的,为什么要弄个生命周期和类同步的变量呢?)但是成员变量和局部变量都可以被final修饰。
- 从内存中的存储方式上看,成员变量是对象的一部分,对象存在于堆内存,局部变量存在于栈内存。
- 从变量在内存中的生存时间上看,成员变量是对象的一部分,随着对象的创建而存在,而局部变量随着方法的调用而自动消失。
- 成员变量如果没有被赋初始值,则会自动以该类型的默认值赋值(如果被final修饰了但是没有被static修饰,则必须显式赋值);局部变量不会自动赋值。
14.创建对象用什么运算符?对象实体和对象引用有何不同?
创建对象时使用new运算符,ObjectA objectA = new ObjectA(); 这里的objectA就是对象引用(对象引用存放在栈内存中),new ObjectA()即为创建的对象实例(对象实例存放在堆内存中)。一个对象引用可以指向1个对象或者不指向(= null);一个对象可以有n个引用指向自己。
15.对象的相等与引用相等有何区别?
对象相等比的是内存中存放的内容是否相同,引用相等比的是指向得内存地址是否相同。