局部变量与成员变量的区别
1.声明的位置不同
局部变量:方法体{},参数,代码块{}中
成员变量:类中方法外
类变量:有static修饰
实例变量:没有static修饰
2.修饰符不同
局部变量:final
成员变量:public、protected、private、final、static、volatile、transient
3.值存储位置不同
局部变量:栈——方法私有线程区,方法执行完会自动释放内存
成员变量:
实例变量:堆——数据共享 成员变量如果不显式赋值会有默认值0,false,null等
类 变量:方法去——数据共享
4.作用域不同
局部变量:{}代码块内
成员变量:所有代码都能使用
5.生命周期
局部变量:每一个线程、每一个执行调用都是新的生命周期
成员变量:
实例变量:随着对象的创建而初始化,随着对象的回收而消亡,每一个对象的实例变量都是独立的
类 变量:随着类的初始化而初始化,随着类的卸载而消亡,该类的所有对象的类变量是共享的
public class Exam2 {
static int s;
int i;
int j;
//每次创建对象时都会调用以下代码块
{
int i =1;
i++; //就近原则,这里的i指前一句的i
j++;
s++;
}
public void test(int j){
i++; //这里的i指成员变量,因为要匹配作用域
j++; //就近原则,这里的j指参数j
s++;
}
public static void main(String[] args) {
Exam2 obj1=new Exam2();
Exam2 obj2=new Exam2();
obj1.test(10);
obj1.test(20);
obj2.test(30);
System.out.println(obj1.i+","+obj1.j+","+obj1.s); //2,1,5
System.out.println(obj2.i+","+obj2.j+","+obj2.s); //1,1,5
}
}