成员(全局)变量和局部变量区别

知识点:

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

  • 声明的位置
  1. 局部变量:方法体{}中,形参,代码块{}
  2. 成员变量:类中方法外(类变量:有static修饰;实例变量:没有static修饰)
  • 默认值
  1. 成员变量没有初始化,默认值是0
  2. 局部变量必须初始化,否则编译不通过
  • 修饰符
  1. 局部变量:final
  2. 成员变量:public private protected static final volatile  transient
  • 值存储的位置
  1. 局部变量:栈(用于存放局部变量表,局部变量表存放了各种基本数据类型本身,以及引用数据类型的地址)
  2. 实例变量:堆(此内存区域的唯一目的就是存放实例对象)
  3. 类变量:方法区(存储已被虚拟机加载的类信息,常量,静态变量)
  • 作用域
  1. 局部变量:从声明处开始,到所属的 }结束
  2. 实例变量:在当前类中“this.”(有时this.也可以缺省),在其他类中“对象名.”访问
  3. 类变量:在当前类中“类名.”(有时“类名.”,可以省略),在其他类中“类名.”或者“对象名.”访问
  • 生命周期
  1. 局部变量:每一个线程,每一次调用执行都是新的生命周期
  2. 实例变量:随着对象的创建而初始化,随着对象的被回收而消亡,每一个对象的实例变量都是独立的
  3. 类变量:随着类的初始化而初始化,随着类的消亡而消亡,类变量为该类所有对象共享

代码分析:

package javaSE;

public class Test6 {
    static int s;  //成员变量:类变量(类中方法外)
    int i;         //成员变量:实例变量(类中方法外)
    int j;         //成员变量:实例变量(类中方法外)
    {
        int i =1;    //局部变量(代码块内)
        i++;         //在没有用this指明是实例变量时,默认就近原则,也就是局部变量
        j++;
        s++;
    }
    public void test(int j){  //局部变量(形参)
        j++;         //在没有用this指明是实例变量时,默认就近原则,也就是局部变量
        i++;          
        s++;
    }

    public static void main(String[] args) {
        Test6 obj1 = new Test6();    //局部变量(方法内)    
        Test6 obj2 = new Test6();    //局部变量(方法内)
        obj1.test(10);
        obj1.test(20);
        obj2.test(30);
        System.out.println(obj1.i+","+obj1.j+","+obj1.s);
        System.out.println(obj2.i+","+obj2.j+","+obj2.s);
    }
}

先按照局部变量与全局变量的声明位置,对上述代码的中变量先进行分类

 执行Test6 obj1 = new Test6()实例化时,会执行代码块,发生如下变化

对于局部变量"i",每一次调用执行都是新的生命周期,所以在实例化之后i=2就会被移除

同理 执行Test6 obj2 = new Test6()实例化时,会执行代码块,发生如下变化

对于局部变量"i",每一次调用执行都是新的生命周期,所以在实例化之后i=2就会被移除

执行obj1.test(10),发生如下变化,j为局部变量存放于局部变量表

对于局部变量"j",执行完obj1.test(10)被移除

接着执行obj1.test(20)

对于局部变量"j",执行完obj1.test(20)被移除

接着执行obj2.test(10)

这就是最后的结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值