黑马程序员技术交流社区
标题:
类的加载时机问题
[打印本页]
作者:
刘乃宽
时间:
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