成员变量VS局部变量 区别
* A:在类中的位置不同 (看代码则可理解)
* 局部变量:在方法定义中或者方法声明上
* B:在内存中的位置不同 (B,C一起记)
* 成员变量:在堆内存(成员变量属于对象,对象进堆内存)
* 局部变量:在栈内存(局部变量属于方法,方法进栈内存)
* C:生命周期不同
* 成员变量:随着对象的创建而存在,随着对象的消失而消失
* 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
* D:初始化值不同 (看代码则可理解)
* 成员变量:有默认初始化值
* 局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。
class Car {
String name;
int sex;
String code;
String address;
public void drive() {
int i = 0;
System.out.println(name + i + "在开车");
}
}
成员变量是name, sex, code, address.
局部变量是Int i;
为什么i是局部变量呢?
因为i在drive()方法里,drive()方法又在Car类里。所以i只是其中一小部分,好比人体的手一样,如果手烫伤了,我们会说局部烫伤。
说一下在内存中的位置。
在家,我们会用各种柜子将东西划分好,这样可以便于管理和使用。
在代码里,我们也会使用这种方法,将成员变量与局部变量放在不同的柜子里,一个叫堆,一个叫栈。
由于成员变量通常是一堆一堆的出现的,像名字,性别,家庭地址,都会一起给出,所以就将成员变量放于堆中。
那么局部变量就放于栈中了。
所以,成员变量:在堆内存。局部变量:在栈内存。
再谈一下生命周期。
生命周期就像我们人一样,从出生到死亡。
这行代码从最开始敲,我们先创建类,就像出生的婴儿。然后我们就要考虑取名,于是定义了姓名,也就是成员变量。
所以姓名(成员变量)是随着婴儿(对象)的创建而存在,如果哪一个婴儿老死了,那么他的姓名也就随他一起消失了。
总结:* 成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量是在方法中生成的,所以随着方法的调用而存在,随着方法的调用完毕而消失
初始值?
婴儿出生,还没有名字,我们会记个小名,比如虫虫,这样可以便于称呼。
所以成员变量(姓名)一开始系统就会给个默认的初始值。
但是方法就不同了,方法是后来的事,不用那么着急,所以系统不会给默认初始值,如果要使用,就自己去定义。