static静态块执行顺序

xiaoxiao2025-12-09  7

今天学习了类的加载顺序,而这一块比较特殊的便是static静态块。静态语句块,优先对象存在,也就是优先于构造方法存在,我们通常用来做只创建一次对象使用。因此在加载时,优先执行静态块语句。

public class TestClass {//类为TestClass的方法 public static void main(String[] args) { // TODO Auto-generated method stub ParentClass pa = new ParentClass(); } } public class ParentClass {//类为ParentClass的方法 static int num = 0; String name = "Searchin"; static String name2 = "Searchin2"; static ParentClass parentClass = new ParentClass(); ParentClass(){ System.out.println("这里是构造函数*************"); } { System.out.println("name1:" + name); System.out.println("这里是块1============"); } static { num += 1; System.out.println("name2:" + name2); System.out.println("这里是静态初始化块*************" + num); } }

此程序执行结果为:

为什么会是这样的执行结果呢?

首先因为static静态块的特殊性,他首先执行,

程序中有四个静态块,所以依次执行。在执行static ParentClass parentClass = new ParentClass();时,此函数重新调用,而由于static只在类第一次加载的时候初始化一次,所以在第一次执行后,就不再执行。而构造块优先级比构造函数要高。所以执行了构造块。然后再执行构造函数。输出了前两个值。此时static ParentClass parentClass = new ParentClass();已经执行完成。接着执行下一个静态快函数 ,输出:

name2:Searchin2 这里是静态初始化块*************

此时静态块已经完全执行完了,执行非静态块,

{ System.out.println("name1:" + name); System.out.println("这里是块1============"); } ParentClass(){ System.out.println("这里是构造函数*************"); }

最后输出如上结果。

转载请注明原文地址: https://www.6miu.com/read-5040590.html

最新回复(0)