是否有相当于Java'这个'在静态类初始化器内?

时间:2016-08-13 00:13:10

标签: java

我有一种情况,在类初始化期间,子类(让我们称之为SubClass)调用基类的静态方法(让我们称之为BaseClass并传递SubClass.class作为参数来标识正在初始化的特定类,或者用Java:

public class SubClass extends BaseClass {
    static { BaseClass.init(SubClass.class); }
    ...
}

而不是BaseClass使用方法:

protected static void init(Class<?> c) {
    ...
}

我想要做的是BaseClass自动调用init,例如:

public class BaseClass {
    static { init(thisclass); }
    ...
}

所以,问题是,Java是否有一些关键字,由上面的thisclass表示,它返回在类初始值设定项中初始化的类?

2 个答案:

答案 0 :(得分:3)

不,没有。

此外,正如user2357112在评论中所述,seek()的静态初始化程序只会运行一次,同时初始化testfile。它不像实例构造函数,每次创建子类的实例时都会运行。基本上你应该坚持现有的计划。

值得注意的是,如果你期望子类将某些东西“注册”某些东西,你可能会对子类初始化不发生时感到惊讶。

例如,如果基类中有静态方法BaseClass,则调用BaseClass 将不会初始化foo - 只有基类,因为子类没有需要进行初始化,因为它的代码都没有执行。

答案 1 :(得分:-2)

没有,因为此时没有实例。就像在静态方法中一样。