<span style="font-size:18px;">package test;
/**
* 不含有继承时,各种方法(静态块,静态方法,非静态代码块,构造方法,普通方法)的执行顺序
*
*/
public class uExtend {
public static void test(){
System.out.println("静态方法");
}
static {
System.out.println("静态代码块");
}
public uExtend() {
System.out.println("构造函数");
}
{
System.out.println("非静态代码块");
}
public void method1() {
System.out.println("普通方法");
}
public static void main(String[] args) {
uExtend.test();
new uExtend().method1();
}
}
运行结果:
静态代码块
静态方法
非静态代码块
构造函数
普通方法
总结:
先执行静态块中的内容,其次判断是否有静态方法在new uExtend()之前执行,如果有的话,就先执行静态方法(在执行构造方法之前先执行静态方法),否则直接执行非静态代码块,之后执行构造方法。
如果new uExtend()方法位置在调用静态方法之前,则静态方法在执行完构造方法(new uExtend())之后再调用。