【发布时间】:2014-06-17 17:51:05
【问题描述】:
class a
{
static final int a =5;
static {
System.out.println("hi");
}
}
class b
{
public static void main(String[] args) {
System.out.println(a.a);
}
}
为什么静态块不运行,输出只有
5
而如果我从类变量中删除 final 关键字,静态块将被执行并且输出变为
hi
5
【问题讨论】:
-
一旦将值分配给具有
final修饰符的原始数据类型,您就无法再次更改该值,换句话说,您无法重新分配变量a以获得新的值不是 int5。如果你尝试这样做,你会得到一个编译器错误。 -
这实际上是一个很好的问题,它的标题有点误导,导致投反对票。
-
@geoand 那么我应该对标题进行哪些编辑?
-
@user3239652 一个建议是“静态和最终修饰符的组合结果是否对静态块执行有任何影响”。沿着这些思路,因为你现在的标题向一些人暗示你实际上并不知道 final 是做什么的。
-
@user3239652 更新了我的答案,包括触发静态块的几种方式