黑马程序员技术交流社区

标题: 关于类的内存问题 [打印本页]

作者: Cheers_for_CRAZ    时间: 2013-12-28 00:26
标题: 关于类的内存问题
本帖最后由 Cheers_for_CRAZ 于 2013-12-30 22:19 编辑

1,类的生存周期是什么,合适加载进内存,何时在内存中消失?2,如果一个类被加载进内存,是不是类的所有内容都被加载进内存?
      如果是这样,那么我如果只是用到另一个类的一个静态变量,这时候类都被加载进内存,岂不是很消耗内存?
  
      

作者: 范龙波    时间: 2013-12-28 01:08
当你的类加载进内存开始到你不在用到这个类时结束.当你用这个类的时候,比如创建一个类的对象,或者用到调用这个类的方法时候,在或者用到这个类的子类对象.,类才加载进内存,如果一个类加载进内存只加载非静态的变量和方法,静态的变量和方法都不进内存进方法区,当你调用一个类的静态变量的时候这时候的类并没有进入到内存只是在方法区中调用这些静态成员.写个代码
package tess;

public class tess2 {
        public static void main(String[] args){
                System.out.println(A.a);
        }
}
class A{
        static int a = 4;
        A(){System.out.println("aaaaaa");};
        {System.out.println(1111);}
}  上面这个代码如果A要是加载进内存的话输出语句肯定会执行到,可是结果显示并没有打印输出语句.
作者: Cheers_for_CRAZ    时间: 2013-12-28 02:33
范龙波 发表于 2013-12-28 01:08
当你的类加载进内存开始到你不在用到这个类时结束.当你用这个类的时候,比如创建一个类的对象,或者用到调用 ...

还有疑惑:1,如果当调用静态变量的时候类没有进内存,那么这时候我再创建对象,类难道要重新加载一次?
2,内存从硬盘上读取文件的时候,难道是仅仅读取了静态成员?没有读取方法?文件(类)中的内容那么多,我怎么知道哪一个是static的?
作者: 范龙波    时间: 2013-12-28 09:28
1.当你创建类的对象的时候,类才加载进内存,调用他的构造方法.是第一次加载进内存不是重新加载一次.
2,当你调用静态成员的时候,是在方法去调用的,不是在内存中调用的,把类中的那些静态成员都加载进了方法区,你调用类中的静态成员的时候 不是用 类名.成员 吗? 都指定类名了应该很好知道是哪一个了
作者: 范龙波    时间: 2013-12-28 09:33
范龙波 发表于 2013-12-28 09:28
1.当你创建类的对象的时候,类才加载进内存,调用他的构造方法.是第一次加载进内存不是重新加载一次.
2,当你 ...

1补充一下当你调用静态变量的时候 把静态变量加载进了方法区,你调用的时候是在方法去调用的,当你创建对象的时候才在内存中加载




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2