Moosphan / Android-Daily-Interview

:pushpin:每工作日更新一道 Android 面试题,小聚成河,大聚成江,共勉之~
5.49k stars 778 forks source link

2019-12-19:谈一谈Java成员变量,局部变量和静态变量的创建和回收时机? #215

Open MoJieBlog opened 4 years ago

hongcwamazing commented 4 years ago

个人简单理解(java基础的东西):

  1. 成员变量:属于类,也就是对象,对象实例化它创建,对象销毁他销毁,举个栗子: class Test{ var name =“github”; //成员变量 fun myName() { Toast.showShort(context, this.name); //自己可以直接用,别的类需要实例化一下才能用, } } 2.局部变量:是一般多是方法中定义的变量(生命周期相对其他两个是最短的),创建和回收 都会随着方法的使用改变

3.静态变量:比较常用,大家都可以直接调用(类名直接 . ***就可以了 ) ,随着类创建而创建,类消失它也消失

欢迎指正一下,有事容易记混

MoJieBlog commented 4 years ago

我理解的和楼上差不多,但是有的地方还不是太一样。当然这也是我自己的理解,欢迎指正。

manondidi commented 4 years ago

成员变量:生命周期伴随类对象,类对象回收时回收 存在堆里 静态变量:不回收 在方法区 随着类的加载而加载,随着类的消失而消失,由于类需要非常长时间的不使用,不利用,不关联,才有可能会被回收机制回收, 所以静态成员变量的生命周期特别长,除非是共享数据,否则不建议使用静态; 局部变量:方法调用时创建 方法结束时被标记为可回收 存在栈里

zhouyueyuedsf commented 4 years ago

这个可以通过饿汉式的单例模拟为撒没有并发问题去理解

byedo commented 1 year ago

成员变量:生命周期伴随类对象,类对象回收时回收 存在堆里 静态变量:不回收 在方法区 随着类的加载而加载,随着类的消失而消失,由于类需要非常长时间的不使用,不利用,不关联,才有可能会被回收机制回收, 所以静态成员变量的生命周期特别长,除非是共享数据,否则不建议使用静态; 局部变量:方法调用时创建 方法结束时被标记为可回收 存在栈里

局部变量:方法调用时创建 方法结束时被标记为可回收 存在栈里 局部变量也可以存在堆里,比如: public void a(){ Object a = new Object(); }