Java类首次装载时,会对静态成员变量或方法进行一次初始化,但是方法不被调用是不会执行的, 静态成员变量和静态初始化块级别相同,非静态成员变量和非静态初始化块级别相同。
public class App {
{
System.out.println("Parent_Non_static_constructors");
}
static {
System.out.println("Parent_Static_Constructors");
}
public App(){
System.out.println("parent_Construction_method");
}
public static int parentStatic(){
System.out.println("parent_static_method");
return 1;
}
public static void parentStatic2(){
System.out.println("parent_static_method_2");
}
}
public class Child extends App{
{
System.out.println("Child_Non_Static_Constructor");
}
static {
System.out.println("Child_Static_Constructor!");
}
public Child(){
System.out.println("Child_constructor_method");
}
public static int ChildStatic(){
System.out.println("Child_Static_method!");
return 1;
}
}
public class Test {
public static void main(String args[]){
Child c = new Child();
}
}
运行结果:
Parent_Static_Constructors
Child_Static_Constructor!
Parent_Non_static_constructors
parent_Construction_method
Child_Non_Static_Constructor
Child_constructor_method
执行顺序为:父类的静态代码快–>子类的静态代码块–>父类非静态代码–>父类构造函数–>子类非静态代码块–>子类构造函数