首页 新闻 会员 周边 捐助

关于java 代码块 构造函数的问题。

0
悬赏园豆:40 [已关闭问题] 关闭于 2013-11-13 17:12

public class ExA {

    private static ExA a = new ExA();

    static {

        System.out.println("父类--静态代码块");

    }

 

    public ExA() {

        System.out.println("父类--构造函数");

    }

 

    {

        System.out.println("父类--非静态代码块");

    }

 

    public static void main(String[] args) {

        new ExB();

    }

}

 

class ExB extends ExA {

    private static ExB b = new ExB();

    static {

        System.out.println("子类--静态代码块");

    }

    {

        System.out.println("子类--非静态代码块");

    }

 

    public ExB() {

        System.out.println("子类--构造函数");

    }

}

请写出代码的输出顺序,并解释一下为什么

剑握在手的主页 剑握在手 | 菜鸟二级 | 园豆:259
提问于:2013-11-07 12:35
< >
分享
所有回答(3)
0

把代码在IDE上执行一下,看看Java编程思想这本书 的解释,就明白了

2012 | 园豆:21645 (高人七级) | 2013-11-07 13:06
0

谁有那闲工夫

林J | 园豆:202 (菜鸟二级) | 2013-11-07 15:00
0

1,访问main函数,执行new ExB();会初始化ExB,再执行Exb的构造代码块和构造函数。

2,初始化子类会先初始化父类。

3,类被初始化执行到定义static自己的对象的时候,会直接执行相关的构造代码块和构造函数,再继续未进行完的初始化。

4,static在初始化中只会执行一次。

5,子类构造部分的代码执行前会先执行父类的构造部分的代码。

剑握在手 | 园豆:259 (菜鸟二级) | 2013-11-07 15:29

6,创建子类对象,

  会先初始化父类,

  再初始化子类,

  然后执行父类非静态代码块以及父类构造函数,

  再执行子类非静态代码块和子类构造函数。

支持(0) 反对(0) 剑握在手 | 园豆:259 (菜鸟二级) | 2014-10-16 21:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册