Live2D
TOP

(一道面试题)生成实例时代码的执行顺序

一.编写父类对象:

public class Father {
	public Father() {
		// TODO Auto-generated constructor stub
		System.out.println("我是Father的构造方法");
	}
	{
	   System.out.println("我是Father的代码快");	
	}
	static
	{
		 System.out.println("我是Father的static代码快");	
		}
}

二.编写子类对象:

public class Son extends Father {
    public Son() {
        // TODO Auto-generated constructor stub
        System.out.println("我是Son的构造方法");
    }
    {
       System.out.println("我是Son的代码快");    
    }
    static
    {
         System.out.println("我是Son的static代码快");    
        }
}

三.编写测试类:

public class Test {
    public static void main(String[] args) {
        Son son=new Son();
    }
}

四.实验结果:

五.总结:

出现了6句话,这6句话也代表了调用过程.

1).最先开始调用static的方法.父类static块---->子类static块

2).执行父类方法

  代码块的执行顺序优于构造方法.先调用执行代码块代码-->再执行父类构造方法的代码

3).执行子类方法

   代码块的执行顺序优于构造方法.先调用执行代码块代码-->再执行子类构造方法的代码

 

 结论:父类静态代码块--->子类静态代码块--->父类代码块--->父类构造方法代码--->子类代码块--->子类构造方法代码

posted @ 2017-11-22 18:16  Old-凯  阅读(661)  评论(0编辑  收藏  举报