java 变量与对象的生命周期

一, 变量的生命周期与范围

只要变量的堆栈块还存在于堆栈上,变量就算活着.也就是说活到方法执行完毕为止.

局部变量的范围只限于申明他的方法之内. 当此方法调用别的方法时,该变量还活着,但不在目前的范围内. 执行其他方法完毕返回时,范围也就跟着回来.

public void doStuff(){ //运行在堆栈,
    boolean b = true; //存活于 doStuff 之中
    go(4); //调用 go 

    //执行完毕后 b 死去
}
public void go(int x){
    int z = x + 24; //x, z, b 都存活, 但 b 不在 go 的范围之中 
    crazy(); //调用 crazy
    //执行完毕后返回 doStuff x, z 死去
}
public void crazy(){
    char c = 'a'; //x, z, b, c 都存活,但只有 c 在 crazy 的范围之中
    
    //执行完毕后返回 go c 死去
}

引用变量与 primitive 主数据类型相同, 引用变量只有能在处于它的范围之内才能被使用.

二, 对象的生命周期

只要有活着的引用, 对象也就活着. 如果某个对象的引用已经不再他的范围中,但此对象的引用还是活着的, 则此对象就会继续活在堆上

如果对象的唯一引用死了,对象就会从堆中被踢开 ( 变成可回收的 ). 引用变量会跟着对象一块解散.

释放对象的三种方法,

  • 引用永久性的离开他的范围
public void go(){
    Life l = new Life(); // l 在方法执行完毕的时候消失
}

  • 引用被赋值到其他对象上
Life l = new Life(); //该对象会在 l 被赋值到别处时消失
l = new Life(); //
  • 直接将引用赋值为 null
Life l = new Life();//该对象会在 l 被赋值 null 时消失
l = null;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,429评论 11 349
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,734评论 0 38
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,306评论 30 472
  • 〖进度〗D1 (1-53页) "人间有味是清欢" 〖书摘〗 1.轻轻地含着一朵花的滋味,心里遂有一种只有春天才会...
    HUASHI阅读 2,118评论 0 0
  • 过去只是过去 你的微笑 你的味道 思念每分每秒 将我缠绕 我试图逃开 逃开你的怀抱 我忘不掉 我挣脱不了 我可能永...
    甜宋儿阅读 2,425评论 2 3