黑马程序员技术交流社区

标题: 类的加载时机问题 [打印本页]

作者: 刘乃宽    时间: 2013-7-29 17:55
标题: 类的加载时机问题
本帖最后由 杨兴庭 于 2013-7-30 22:36 编辑

编译时期就加载了还是运行时再加载?静态方法随着类的加载而加载,先于对象,下面程序当A类加载时,成员变量a和成员函数show也会加载,那么当程序运行时刻,A.show()调用时,a=new A()这个初始化什么时候执行呢?
class A
{
        static A a=new A();
        public static A show()
       {
        return a;
       }
}
class B
{
        public static void main(String[] args)
       {
           A a=A.show();
       }
}
作者: 手心里的温柔    时间: 2013-7-29 18:07
当class A加载进内存时,就创建了A的对象a
作者: 张强1    时间: 2013-7-29 18:33
你也说了,静态方法随着类的加载而加载,先于对象,所以他运行的顺序是这样的。
1.因为调用了show方法,所以它第一步是先找到A.class文件并加载。
2.随着A.class文件的加载静态方法加载。
3.在堆内存中开辟空间,分配内存地址。
4.将内存地址付给栈内存中的a变量。
作者: 张强1    时间: 2013-7-29 18:37
在上面那个2,3之间在加一步,先在栈内存中开辟块空间,存储main方法,其中也就产生了a对象了。
这一步我自己理解的时候总是不在意,怕你不明白,给你加上、




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