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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘乃宽 中级黑马   /  2013-7-29 17:55  /  1302 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 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();
       }
}

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

3 个回复

倒序浏览
当class A加载进内存时,就创建了A的对象a
回复 使用道具 举报
你也说了,静态方法随着类的加载而加载,先于对象,所以他运行的顺序是这样的。
1.因为调用了show方法,所以它第一步是先找到A.class文件并加载。
2.随着A.class文件的加载静态方法加载。
3.在堆内存中开辟空间,分配内存地址。
4.将内存地址付给栈内存中的a变量。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
在上面那个2,3之间在加一步,先在栈内存中开辟块空间,存储main方法,其中也就产生了a对象了。
这一步我自己理解的时候总是不在意,怕你不明白,给你加上、
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马