java中静态方法,非静态方法和构造方法的执行顺序问题一直是面试总会遇到的一个问题,很多初级程序员都会在这个上面出现问题,也包括博主我,所以今天我将自己亲历写出来,让大家看一看,结果显而易见。
/**
* @author 文先生
* @date 2019/05/15
* QQ 1452561187
* 项目:springboot-shiro-demo1.0.1
* 包:com.example.springboot
**/
public class A {
static {
System.out.println("输出静态方法===A");
}
public A() {
System.out.println("输出构造方法===A");
}
{
System.out.println("输出非静态方法===A");
}
}
/**
* @author 文先生
* @date 2019/05/15
* QQ 1452561187
* 项目:springboot-shiro-demo1.0.1
* 包:com.example.springboot
**/
public class B extends A {
static {
System.out.println("输出静态方法===B");
}
public B() {
System.out.println("输出构造方法===B");
}
{
System.out.println("输出非静态方法===B");
}
}
/**
* @author 文先生
* @date 2019/05/15
* QQ 1452561187
* 项目:springboot-shiro-demo1.0.1
* 包:com.example.springboot
**/
public class C {
public static void main(String[] args) {
B b = new B();
}
}
这时我们来看一看控制台
输出的顺序为:
输出静态方法===A
输出静态方法===B
输出非静态方法===A
输出构造方法===A
输出非静态方法===B
输出构造方法===B
所以我们很明显得出,实例对象时先输出父类静态方法,在输出子类静态方法,在输出父类非静态方法和构造方法,随之又输出子类非静态方法和构造方法。