原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11451040.html
版本:Java8
直接上代码:
public class StaticMain { public static int i = 200; { i = 100; } public static void main(String[] args){ System.out.println(i); } }
结果:
继续上代码:
public class StaticMain { { i = 100; } public static int i = 200; public static void main(String[] args){ System.out.println(i); } }
结果:
继续上代码:
public class StaticMain { { i = 100; System.out.println(i + " : static"); } public static int i = 200; public static void main(String[] args){ System.out.println(i + " : main"); } }
结果:
继续上代码:
public class StaticMain { public static int i = 200; { i = 100; System.out.println(i + " : static"); } public static void main(String[] args){ System.out.println(i + " : main"); } }
结果:
继续上代码:
public class StaticMain { public static int i; { i = 100; System.out.println(i + " : static"); } public static void main(String[] args){ System.out.println(i + " : main"); } }
结果:
继续上代码:
public class StaticMain { public static int i; { i = 100; System.out.println(StaticMain.i + " : static"); } public static void main(String[] args){ System.out.println(StaticMain.i + " : main"); } }
结果:
接下来改变一下:
继续上代码:
public class StaticMain { public static int i; { i = 100; System.out.println(StaticMain.i + " : static"); } public static void main(String[] args){ StaticMain staticMain = new StaticMain(); System.out.println(StaticMain.i + " : main"); } }
结果:
继续上代码:
public class StaticMain { public static int i = 200; { i = 100; System.out.println(StaticMain.i + " : static"); } public static void main(String[] args){ StaticMain staticMain = new StaticMain(); System.out.println(StaticMain.i + " : main"); } }
结果:
继续上代码:
public class StaticMain { { i = 100; System.out.println(StaticMain.i + " : static"); } public static int i = 200; public static void main(String[] args){ StaticMain staticMain = new StaticMain(); System.out.println(StaticMain.i + " : main"); } }
结果:
结论: 静态块中的变量是先拿到定义再在后续拿到实际变量之后再进行后续对变量的操作的; 如果不初始化静态块所属类,静态块将不会因为他的所属类的调用而被加载.
附:类初始化时的顺序:
1、类内容(静态变量、静态初始化块) => 实例内容(变量、初始化块、构造器)
2、父类的(静态变量、静态初始化块)=> 子类的(静态变量、静态初始化块)=> 父类的(变量、初始化块、构造器)=> 子类的(变量、初始化块、构造器)
结束🔚