Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
MoJieBlog opened this issue Dec 19, 2019 · 5 comments

Comments

@MoJieBlog
Copy link
Collaborator

No description provided.

@hongcwamazing
Copy link

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

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

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

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

@MoJieBlog
Copy link
Collaborator Author

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

  • 成员变量:随着类对象的创建而创建,类对象不被引用时,会被标记为可以回收。在下一次内存回收时被回收。
  • 局部变量:随着方法的调用被创建,方法执行完毕,被标记为可以被回收,在下一次内存回收时被回收。
  • 静态变量:当类被加载时,直接创建。注意这里是加载,就算没有创建类对象,只是import,静态变量也会被创建。当类销毁时,被标记为可以回收。在下一次内存回收时,被回收。

@manondidi
Copy link

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

@zhouyueyuedsf
Copy link

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

@byedo
Copy link

byedo commented May 3, 2023

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants