局部变量与成员变量:
借助以下代码引入题目:
class practice{
public static void main(String[] arge){
Plane p1=new Plane("波音747",4.5f,120);
int i = 0;
for(i = 0;i<3;i++){
p1.fly();
}
}
}
class Plane{
private String model;//型号
private float length;//机身长度
private int zaiKeLiang;
public Plane(String model,float length,int zaiKeLing){
this.model = model;
this.length = length;
this.zaiKeLiang = zaiKeLiang;
}
public void fly(){
int x = 1;
System.out.println(model+"我在飞!第"+x+"圈");
}
}
以上代码中局部变量有i,x,p1。成员变量有model,length,zaiKeLiang
局部变量:定义于方法中的变量
成员变量:定义于类中的变量
main在格式上也同样为方法,只不过它为程序的入口方法。所以其中定义的变量也为局部变量。可能由人疑惑p1为啥也为局部变量。拿一个例子说明一下吧。应该都记得数组的创建结构吧。
int[] intArray = new int[10];
//对比一下对象的创建格式
Plane p1 = new plane();
从格式上对象的创建与数组就有相像之处,可以说明对象为一种特殊的变量,它能装下方法与其他变量。
从存储方法上,局部变量存储于栈中,成员变量存储于堆中。
在栈中,每次调用方法时,都会在栈中单独提供出一部分存储空间来供给方法使用,在调用完毕(方法代码执行完毕。main方法也一样)之后会随之清除。
当new出来的对象存储空间(上述p1),在没有对象(栈中无引用的时候)引用时会被清空(包括成员变量)。
一般回收顺序是:
- 栈中方法调用完毕后存储空间回收。
- 局部变量删除,导致引用类型变量(对象)被清空。
- 对象存储空间无引用对象后被java虚拟机(jvm)清除。
有关变量初始化:
局部变量必须初始化数据。
成员变量无需初始化仅声明即可,初始化数据默认为0。(引用类型为null,基本类型为0或0代表的字符)
总结上述知识点得: