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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

7黑马币
已经完全晕了。。。。。。。
class W {
{
  System.out.println( );
}
static {
  System.out.println( );
}
W() {
  System.out.println( );
}
}
class Y {
{
  System.out.println( );
}
static {
  System.out.println( );
}
Y() {
  System.out.println( );
}
}
class X {
Y b = new Y();
{
  System.out.println( );
}
static {
  System.out.println( );
}
X() {
  System.out.println( );
}
}
public class Z extends X {
{
  System.out.println( );
}
static {
  System.out.println( );
}

Z() {
  super();
  System.out.println( );
}
W w = new W();
public static void main(String[] args) {
  new Z();
}
}

最佳答案

查看完整内容

看到这题不要着急一步一步的分析 1.此代码文件保存为"Z"(有main方法),而Z继承了X,所以首先加载X类,而在X类中有静态代码块,所以输出"X的静态代码块.....1" 2.加载类Z,因为Z中有静态代码块,所以输出"Z的静态代码块......2" 3.执行Z的空参构造函数中super()通知父类进行初始化操作,而在父类(X类)中有引用类型的成员变量、构造代码块(它们俩按照先后顺序执行)、构造方法 a.为X类中引用变量b执行初始化操作,b=new Y();此时要加载类Y ...

5 个回复

倒序浏览
看到这题不要着急一步一步的分析
1.此代码文件保存为"Z"(有main方法),而Z继承了X,所以首先加载X类,而在X类中有静态代码块,所以输出"X的静态代码块.....1"
2.加载类Z,因为Z中有静态代码块,所以输出"Z的静态代码块......2"
3.执行Z的空参构造函数中super()通知父类进行初始化操作,而在父类(X类)中有引用类型的成员变量、构造代码块(它们俩按照先后顺序执行)、构造方法
        a.为X类中引用变量b执行初始化操作,b=new Y();此时要加载类Y
                (1)加载类Y执行Y类中的静态代码块,所以输出"Y的静态代码块.....3"
                (2)执行Y类中的构造代码块,所以输出"Y的构造代码块.....4"
                (3)执行Y类中的空参构造函数,所以输出"Y的空参构造函数....5"
        b.执行X类中的构造代码块,所以输出"X的构造代码块.....6"
        c.执行X类中的构造函数,所以输出"X的空参构造函数....7"
4.父类初始化完毕(包括成员变量、构造代码块(它俩按照代码中的先后顺序执行)、构造函数)后,并不会直接执行super()后面的内容,而是要对子类Z按照上面的
顺序进行初始化(包括成员变量、构造代码块(它俩按照代码中的先后顺序执行)、构造函数)
        a.子类X构造代码块在上面,所以先执行,输出"Z的构造代码块......8"
        b.为Z类Z的成员变量w赋值w=new W(),所以要现加载W
                (1)加载类W,执行其中的静态代码块,所以输出"W的静态代码块......9"
                (2)创建W的对象,所以先执行W的构造代码块,输出"W的构造代码块......10"
                (3)执行W的构造方法,所以输出"W的空参构造函数....11"
        c.接着执行super()后面的内容,所以输出"Z的空参构造函数....12"
回复 使用道具 举报
leaf168 发表于 2015-10-11 23:00
看到这题不要着急一步一步的分析
1.此代码文件保存为"Z"(有main方法),而Z继承了X,所以首先加载X类,而在X类 ...

呃........好吧,按照解释看的好些了,不过还是有点懵懵的,再多看几遍希望会好些,谢谢这么仔细的回复。幸苦了。
回复 使用道具 举报
没有打印输出,定义的类有几个 主函数中new了一个Z 也没有声明对象的引用,这样有什么意义呢
回复 使用道具 举报
最容易理解,接受的就是画个内存图,一目了然
回复 使用道具 举报
地方小,只能写这些,不懂得可以加下QQ:510063983,互相交流下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马