本帖最后由 杨增坤 于 2013-9-22 20:56 编辑
- public class StaticSuper{
- static {
- System.out.println("super static block");
- }
- StaticSuper(){
- System.out.println("super constructor");
- }
- }
- public class StaticTests extends StaticSuper {
- static{
- System.out.println("static block");
- }
- StaticTests(){
- System.out.println("constructor");
- }
- public static void main (String [] args){
- System.out.println("in main");
- StaticTests st= new StaticTests();
- }
- }
复制代码
程序执行结果
super static block
static block
in main
super constructor
constructor
书上有句话说:“静态初始化程序会在构造函数之前执行”
那,我在想,程序执行 StaticTests st=new StaticTests();的时候,首先应该执行子类的静态初始化程序
就是 static{System.out.println("static block");}首先输出的应该是static block 。然后才会执行子类的构造函数StaticTests().然后子类的构造函数会先调用父类的构造函数。
我的分析的结果和实验结果不一样啊。
另外,“in main” 的输出的位置如何判断?
如果main()函数是程序的起点,是不是应该先输出“in main”呢?
求解答,新手,请轻拍^^.
|
|