给出下面代码的输出结果
本人是一个初学者所以想请教请教各位能不能给出结果后简单的把原理说说!谢谢!
public class A {
static{
System.out.print("1");
}
public A(){
System.out.print("2");
}
}
public class B extends A {
static{
System.out.print("a");
}
public B(){
System.out.print("b");
}
}
public class Hello{
public static void main(String[] arge){
System.out.println(" ");
A ab = new B();
System.out.println(" ");
ab = new B();
}
}
------解决方案--------------------------------------------------------
我运行了一下,输出结果为:
空格
1a2b空格
2b
至于解释,楼主可以看一下这篇帖子,好像一两句话也说不清楚,不过我记得think in java里说得很详细,楼主可以去认真看看,在多态那章。
http://topic.csdn.net/u/20081212/22/cb7bdbb9-9dd9-4706-ad03-655854095c55
------解决方案--------------------------------------------------------
初始化顺序一般是
父类的静态块和静态成员变量
子类的静态块和静态成员变量
父类的成员变量
父类的构造方法
子类的成员变量
子类的构造方法
其中静态块和静态成员变量只执行一次。
------解决方案--------------------------------------------------------
结果是
1a2b
2b
首先是
父类的静态块
子类的静态块
父类的构造器
子类的构造器
而只要是static静态语句,只执行一次