黑马程序员技术交流社区
标题:
静态代码块,非静态代码块,构造函数的执行顺序(带题)
[打印本页]
作者:
耳东君
时间:
2015-4-9 22:24
标题:
静态代码块,非静态代码块,构造函数的执行顺序(带题)
public class ExA {
//private static ExA a = new ExA();
static {
System.out.println("父类--静态代码块A"); //1.java虚拟机加载ExA.class文,静态代码块执行
}
public ExA() {
System.out.println("父类--构造函数B"); //7 父类的构造方法中的代码被执行
}
{
System.out.println("父类--非静态代码块C"); /*6 父类中的构造代码块被执行,(网上说:在编
译时期编译器会默认将构造代码块中的代码移动到构造方法中,而且移动到构造方法的前面,所以他
优先于构造方法中的代码先执行)*/
}
public static void main(String[] args) {
System.out.println("主函数打印语句S");//2.找到主函数,执行打印语句。
new ExB();//3. 创建子类匿名对象
}
}
class ExB extends ExA {
// private static ExB b = new ExB();
static {
System.out.println("子类--静态代码块D"); //4.主函数中创建子类匿名对象后,加载ExB.class文件 子类静态代码块执行
}
{
System.out.println("子类--非静态代码块E"); //8 子类的构造代码块被执行
}
public ExB() {
//super() 5.执行父类的构造方法
System.out.println("子类--构造函数F"); //9 子类构造方法中的代码被执行
}
}
复制代码
上面执行顺序的前提是private static ExA a = new ExA(); private static ExB b = new ExB(); 都被注释掉了,求去掉注释后此段代码的执行顺序变化的原因。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2