class A{
public int i = method();
public static int j= method2();
public int k = 0;
public A(){
System.out.println(1);
}
public int method(){
System.out.println(2);
return 2;
}
public static int method2(){
System.out.println(3);
return 3;
}
}
public class B extends A{
public int m = method3();
public static int n = method4();
static {
System.out.println("B()");
}
public int t = 0;
public B(){
System.out.println(4);
}
public int method3(){
System.out.println(5);
return 5;
}
public static int method4(){
System.out.println(6);
return 6;
}
public static int x = method5();
public static void main(String[] args){
System.out.println(7);
A a = new B();
}
private static int method5() {
System.out.println("0");
return 0;
}
}
- 执行public class B extends A(需要有main方法)的时候会先调用B的父类A中的静态部分(静态变量和静态代码块),但是并不会调用A的成员变量和构造函数,然后会调用B中的静态部分,但也不会调用B的成员变量和构造函数;
- new B();则会同时调用A和B中的静态变量和成员变量和构造函数;
- 类的静态部分是先于成员变量和构造方法调用的,无论静态部分在什么位置,都会先于非静态部分进行调用,但是静态部分自身的调用顺序是有先后的,会按照代码的先后顺序进行调用;
网友评论