成员变量与局部变量
1、成员变量:定义在类中方法外的变量
局部变量:定义在方法中的变量
2、不同点:
代码层面:定义位置不同,参考1
内存层面:空间不同,成员变量属于对象,跟对象一起存储在堆内存中
局部变量属于方法,在栈内存的方法的栈帧中
生命周期不同:成员变量随着对象的创建而存在,对象的消失而消失
局部变量随着方法的调用而存在,方法的调用结束而消失
初始化状态不同:局部变量:没有默认的初始值,必须先赋值才能使用
成员变量:有默认的初始值,引用数据类型:null
基本数据类型:整数类型:0
小数类型:0.0
布尔类型:false
字符类型:’u0000’
方法的形式参数
1、方法的形式参数可以是引用数据类型,也可以是基本数据类型。
2、引用数据类型:类 接口 数组 枚举等
3、当方法的形式参数是引用数据类型时,调用方法时,传入的是一个对象的内存地址,在方法的内部可以通过这个内存地址访问方法外的对象。
方法的返回值
1、方法的返回值既可以是基本数据类型,也可以是引用数据类型
2、当方法的返回值是引用数据类型时,在return语句中,一定返回该类型的一个对象。
匿名对象
1、匿名对象:没有名字的对象。
2、定义格式:
new 类名();
3、匿名对象的使用场景:
1、如果某个对象在创建之后,其方法只调用一次,那么就可以使用匿名对象来调用。这种写法会节省一些内存空间。
2、可以作为某个方法的实际参数。这种调用形式,在主方法中,可以将该对象看做匿名对象,但是在被调用的方法中,这个对象是有引用的对象,不是匿名对象。
3、可以作为某个方法的返回值。这种调用形式,在被调用方法中,这个对象是匿名对象,但是在调用者,这个对象可能不是匿名对象。
4、可以作为数组或者集合的元素,使用数组的索引可以依次取到匿名对象。
4、注意事项:
匿名对象可以给成员变量赋值,但是这样做没有任何意义。因为匿名对象一旦被赋值,匿名对象就变成了垃圾,很快被回收掉。即使没有被回收,我们也无法使用这个匿名对象。
5、匿名对象存入数组的使用
public class Test1 { public static void main(String[] args) { Person[] prr = new Person[5]; for(int i=0;i<prr.length;i++) { prr[i]=new Person(); prr[i].age = i; } System.out.println(prr[3].age); } } class Person{ String name; int age; }