我的问题是关于static关键字的一个特定用法。可以使用static
关键字覆盖类中不属于任何函数的代码块。例如,以下代码可以编译:
我的问题是关于static关键字的一个特定用法。可以使用static
关键字来覆盖类中不属于任何函数的代码块。例如,以下代码可编译:
public class Test {
private static final int a;
static {
a = 5;
doSomething(a);
}
private static int doSomething(int x) {
return (x+5);
}
}
如果您删除static
关键字,编译器会报错,因为变量a
是final
的。然而,如果同时删除final
和static
关键字,那么它可以编译通过。
这让我感到困惑。我该如何创建一个不属于任何方法的代码段?它怎么可能被调用?总的来说,这个用法的目的是什么?或者更好地说,我在哪里可以找到相关文档?
public static void staticMethod() {}
的类,如果您执行TestStatic.class.getMethod("staticMethod")
,则不会调用静态初始化程序。更多信息请参见https://docs.oracle.com/javase/specs/jvms/se10/html/jvms-5.html#jvms-5.5。 - Totò