成员变量与局部变量

定义的位置上区别:    

  1. 成员变量是定义在方法之外,类之内的。
  2. 局部变量是定义在方法之内。

 

作用域的区别

  1. 成员变量的可以在本类任意位置使用,如果被public修饰,其它类如可以拿到本类对象引用也可使用
  2. 局部变量只能在方法体内部使用

 

生命周期的区别

  1. 成员变量的生命周期与本类对象的生命周期绑定,类创建而开始,类消亡而消失
  2. 局部变量的生命周期与方法的生命周期相关,在方法中线程执行到该成员变量生命周期开始,而方法执行完生命周期结束

 

在内存中的区别

  1. 成员变量存储在堆中的对象里面,由垃圾回收器负责回收
  2. 局部变量的数据存在栈内存中,栈内存中的局部变量随着方法的消失而消失。

 

默认值的区别

成员变量

数据类型 默认的初始值
short0
int0
long0
float0.0
double0.0
booleanfalse
char' '
Stringnull
对象null

局部变量

局部变量没有默认的初始值,必须初始化才能使用。
 

 

调用顺序

在同一个类中,成员变量的名字可以与局部变量的名字相同,但是优先调用局部变量,就近优先,如果非要访问成员变量,须本类引用.变量,才可以,本类引用大多是用this,但要注意使用位置!

public class MyClass {
    private int i;//成员变量
    private void myMethod(){
        final int i = 1;//局部变量
        new Thread() {
            @Override
            public void run() {
              int x = i;
              //int x = this.i;//错误
            }
        }.start();
    }
}

上方代码第8行的i是局部变量的i,第9行之所以错误是因为this关键字代表本类对象,当前是在子线程中,所以代表的是子线程中的本类对象Thread。第9行这里如果必须使用成员变量,要么你想办法拿到MyClass对象的引用,用么就直接把成员变量的名字改掉与局部变量不同就可以了!

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值