先看代碼:
public class Test { public static void main(String[] args){ System.out.println("這是main方法"); System.out.println("---------------------分割線-------------------"); Outer outer = new Outer(); System.out.println("---------------------分割線-------------------"); System.out.println(Outer.Inner.a); } } class Outer{ public static int n = 2; static{ System.out.println("這是靜態代碼塊!"); } static class Inner{ public static int a = 10; // a 是類加載之后才會存在 //public static final a = 10; // final 是在編譯時期就存在 如果只調用a 不會加載這個靜態內部類 static{ System.out.println("這是靜態內部類!"); } } }
結果是:
靜態內部類和普通類的加載順序是一樣的: 當類被主動調用的時候,JVM就會去初始化這個類(https://www.cnblogs.com/DDiamondd/p/10963096.html)