最近笔试常常遇到考察Java代码块执行顺序的题目,网上查看博客错漏百出,特地自己测试了一下。
如有错漏,希望路过的大佬指出来,以便我进行更改。
先上代码吧!
public class ClassA {
private static String a = print("A");
static {
System.out.println(a+":A——静态块");
}
{
System.out.println("A——构造块");
}
public ClassA() {
System.out.println("A——默认构造方法");
}
public ClassA(String name) {
System.out.println("A——带参构造方法");
}
public static String print(String className) {
System.out.println(className+"——静态属性");
return className;
}
}
public class ClassB extends ClassA{
private static String b = print("B");
static {
System.out.println(b+":B——静态块");
}
{
System.out.println("B——构造块");
}
public ClassB() {
System.out.println("B——默认构造方法");
}
public ClassB(String name) {
System.out.println("B——带参构造方法");
}
}
public class ClassTest {
public static void main(String[] args) {
System.out.println("start");
ClassB laughter = new ClassB("laughter");
System.out.println("------------------");
ClassB Somnus = new ClassB();
}
}
接下来是测试结果
总结
结合我查询的资料以及测试结果,可以得知执行顺序如下:
- main 函数作为入口,按行依次执行;
- 静态属性 > 静态方法声明 > 静态块;
- 动态属性 > 动态方法声明 > 构造块;
- 构造方法。
补充说明:
- 创建一个对象时,无论是否带参数,都会先调用它的父类(如果存在父类)的默认构造方法。