遵循原则
1、先父后子,先静态后常态、静态中顺序执行
public class TestA {
public static String Str = "A static str var";
static {
System.out.println(Str);
System.out.println("A static init");
}
{
System.out.println("A init");
}
public TestA() {
System.out.println("A ()");
}
public static void main(String[] args) {
TestB b = new TestB();
}
}
class TestB extends TestA {
public static String str = "B static str var";
public static TestC c = new TestC();
static {
System.out.println(str);
System.out.println("B static init");
}
{
System.out.println("B init");
}
public TestB() {
System.out.println("B ()");
}
}
class TestC {
public static String str2 = "C static str var";
static {
System.out.println(str2);
System.out.println("C static init");
}
{
System.out.println("C init");
}
public TestC() {
System.out.println("C ()");
}
}
输出结果
A static str var
A static init
C static str var
C static init
C init
C ()
B static str var
B static init
A init
A ()
B init
B ()
public class TestA {
public static String Str = "A static str var";
static {
System.out.println(Str);
System.out.println("A static init");
}
{
System.out.println("A init");
}
public TestA() {
System.out.println("A ()");
}
public static void main(String[] args) {
TestB b = new TestB();
}
}
class TestB extends TestA {
public static String str = "B static str var";
static {
System.out.println(str);
System.out.println("B static init");
}
{
System.out.println("B init");
}
public static TestC c = new TestC();
//改动
public TestB() {
System.out.println("B ()");
}
}
class TestC {
public static String str2 = "C static str var";
static {
System.out.println(str2);
System.out.println("C static init");
}
{
System.out.println("C init");
}
public TestC() {
System.out.println("C ()");
}
}
输出结果
A static str var
A static init
B static str var
B static init
C static str var
C static init
C init
C ()
A init
A ()
B init
B ()