Java 运行 导入 class 时的代码

Java run code when class is imported

我知道这里有一个问题可以回答这个问题,因为我之前已经读过它。我这辈子都找不到,在 google.

上也找不到

我记得之前的问题是关于调用各种方法和代码片段的顺序,并且有一个特定的部分显然被称为第二个 class 被导入(也可以是用于做令人讨厌的意想不到的事情)。这叫什么/我该怎么做?

如果我没记错的话,大概是这样的:

Java 文件 1:

...
import somepackage.myclass; //prints "class imported"
...
myclass a = new myclass(); //print "constructor"
...

Java 文件 2

package somepackage;

public class myclass {
    ...
    //Something to print out "class imported"
    ...
    public void myclass(){
      System.out.println("constructor");
    }
}

问题/答案有几个这样的结构,但我不记得它们叫什么了。有人能给我指出正确的方向吗?

试试这个:

public class Myclass {
    static {
        System.out.println("test");
    }
}

这叫做Static Initialization Block

您可能会想到 static initializer:

package somepackage;

public class myclass {
    static{
      System.out.println("class imported");
    }

    public void myclass(){
      System.out.println("constructor");
    }
}

class 的静态初始值设定项在首次访问 class 时获得 运行,无论是创建实例,还是访问静态方法或字段。