局部变量与成员变量

局部变量与成员变量的区别

 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
    }
}

你可能感兴趣的:(局部变量与成员变量)