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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class C {
        public C() {
                System.out.println("C");
        }
}

class B {
        public B() {
                System.out.println("B");
        }
}

class A extends C{
        public B b = new B();
       
        public A() {
                System.out.println("A");
        }
       
        public static void main(String[] args) {
                A a = new A();
        }
}

11 个回复

倒序浏览
这个还真是要坐等....
回复 使用道具 举报
我认为应该是中国职联CBA
这样的题有个规律,先看父类。
首先,程序走main入口进来,然后运行 A a = new A();
然后程序发现他又父类,就去找他的父类。
然后发现他的父类C没有成员变量需要初始化但有默认构造,所以运行默认构造输出了C
然后父类弄完了就回来走A类,发现,咦。。A类有个成员变量public B b需要初始化为new B();那么就要去走B类。
然后我们看B类没有父类,所以看他有没有成员变量,然后看有没有默认构造。他有默认构造,所以就输出了B
最后回到A类运行A类的默认构造A(),输出A
所以最后是CBA   我一开始还犹豫会不会运行B。。因为没考虑过成员变量的初始化问题。。然后测试了下确实是CBA然后放心啦
回复 使用道具 举报
CBA父类构造C,显示初始化B,构造A
回复 使用道具 举报
zcbcba123 发表于 2015-12-12 01:06
我认为应该是中国职联CBA
这样的题有个规律,先看父类。
首先,程序走main入口进来,然后运行 A a = new A( ...

分析的很到位,赞一个{:2_30:}
回复 使用道具 举报
wwwjpm@126.com 发表于 2015-12-12 11:41
分析的很到位,赞一个

谢谢...就是技术分挣得太慢..很头疼
回复 使用道具 举报
zcbcba123 发表于 2015-12-12 11:54
谢谢...就是技术分挣得太慢..很头疼

都一样,帮忙价格好友,我要挣五个黑马
回复 使用道具 举报
zcbcba123 发表于 2015-12-12 11:54
谢谢...就是技术分挣得太慢..很头疼

去每个版块回复哪些有回复奖励的帖子
回复 使用道具 举报
Murphye 中级黑马 2015-12-12 12:56:11
9#
一个对象实例化的过程 A a = new A();
1.JVM会读取指定的路径下的A.class文件,并加载进内存,并会先加载A的父类(即先加载C.class)
2.在内存中开辟C空间,并分配地址。
3.对对象C的属性进行默认初始化。
4.调用C的构造函数进行初始化,此时输出C
5.接着初始化A的成员变量,public B b = new B();时,初始化它,此时输出B
6.最后调用A的构造函数进行初始化,输出A
最终结果为CBA

回复 使用道具 举报 1 0
wwwjpm@126.com 发表于 2015-12-12 11:57
去每个版块回复哪些有回复奖励的帖子

恩,好像可以发帖子要积分~
回复 使用道具 举报
Zrz_K 中级黑马 2015-12-12 19:15:01
11#
9楼大神分析的很牛!理解了内存图的步骤再看这题就简单多了~
回复 使用道具 举报
值得学习~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马