A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

类,对象,成员变量,局部变量的生命周期是怎么样的,具体有什么样的逻辑关系啊?

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

4 个回复

倒序浏览
一个类,编译成class文件之后,一个程序的入口是从主函数开始的,静态成员和类是是在主函数开始之前就存放在静态内存中的,对象呢就是在创建的时候开始有,直到没有引用再指向这个对象了,这个对象就会变成垃圾等着被回收,局部变量就是用完之后就会被遗弃,遗弃这个词不太准确,就是说局部变量不再使用了,生命周期结束!

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
局部变量位于栈区,静态变量位于方法区,实例变量位于堆区,方法的字节码位于方法区,对象本身位于堆区,对象的引用位于栈区。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
(1)一个java类的完整的生命周期会经历加载、连接、初始化、使用、和卸载五个阶段。
        如下图所示

(2)Java对象的生命周期包括三个阶段:对象的创建,对象的使用,对象的清除。

(3)Java的变量分为成员变量和局部变量,他们分别有自己的生命周期。
      
  成员变量的作用域为从定义的起始位至整个类结束。
  public class Test{
      private int i;
      .............
         }
 成员变量i的作用域为整个Test类体里,直到结束,
 在Test类中的任何地方都可以引用它。

(4)局部变量的作用域是在方法从定义它的地方开始到方法结束。
  public class Test{
      public void doSomething(String s){     // s的作用域只在大括号里
               System.out.println(s);
      }
      public void doAnotherThing(){
               s = new String();  //已超出了s 的作用域,系统将找不到这个变量,报错
      }
      .............
  }

图片5.jpg (13.11 KB, 下载次数: 202)

图片5.jpg

评分

参与人数 1技术分 +2 收起 理由
陈丽莉 + 2

查看全部评分

回复 使用道具 举报
局部变量和对象的引用是放在栈内存中的,对象和成员变量是放堆内存中的,堆内存中的数据是线程共享的。
先说下栈和堆的区别:堆中的数据是共享的,需要在程序运行期间被储存的,而栈内存是运行时的。这种区分方式是为了更好的使用和节省内存。
栈内存中局部变量的数据使用完毕之后其所在的内存空间即被释放,因为局部变量没有保存的必要,仔细想想就明白了,所以栈内存中的局部变量的生命周期很短。
堆内存中的数据在没有引用的的情况下,会在不确定的某一时刻被GC回收掉。这时数据的生命周期就完结了
画个图给你:
堆内存中是实实在在的对象,而s只是储存了这个对象的内存首地址,没有引用储存那块内存地址的时候,那个真正的对象也没有存在的必要了,就会被GC掉,就over了

类的生命周期比较复杂,参见以下博客,写的很不错
http://blog.csdn.net/zhengzhb/article/details/7517213

评分

参与人数 1技术分 +2 收起 理由
陈丽莉 + 2 恭喜25分~

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马