一道题理解Java类加载机制,static经典问题

show you the code

public class Test
{
	public static Test t1 = new Test();
	 public  Test() {
			// TODO Auto-generated constructor stub
		System.out.println("Test父类构造方法");
	    }
    {
         System.out.println("Test父类非静态块");
    }   
    static
    {
        System.out.println("Test父类静态块");
    }
 }
public class TestSon extends Test{
	public static TestSon t2 = new TestSon();
	 public TestSon() {
		// TODO Auto-generated constructor stub
		System.out.println("Test子类构造方法");
	    }
   {
        System.out.println("Test子类非静态块");
   }   
   static
   {
       System.out.println("Test子类静态块");
   }
}
public class TestFatherAndSon {
public static void main(String[] args) {
	TestSon son=new TestSon();
}
}
  • 运行结果:
Test父类非静态块
Test父类构造方法
Test父类静态块
Test父类非静态块
Test父类构造方法
Test子类非静态块
Test子类构造方法
Test子类静态块
Test父类非静态块
Test父类构造方法
Test子类非静态块
Test子类构造方法

类的加载顺序:

(1) 父类静态对象和静态代码块

(2) 子类静态对象和静态代码块

(3) 父类非静态对象和非静态代码块

(4) 父类构造函数

(5) 子类 非静态对象和非静态代码块

(6) 子类构造函数

猜你喜欢

转载自blog.csdn.net/qq_35969549/article/details/81564053