谁能解释发生了什么?静态块没有被调用
public class MagicFinal {
public static void main(String[] args) {
System.out.println(A.s);
}
}
class A {
static {
System.out.println("class has been loaded");
}
public static final String s = "final";
public static final Integer i = 3;
}
控制台:
最终
它是什么?我不明白为什么这个类没有被加载,我知道类在第一次调用时总是加载。字段s
在字符串池中,我看到最终修饰符是魔术。
如果我删除final修饰符(public static String s = "final"
)我会得到
控制台:
类已经加载
最终
注:我已经改变了场i
:public static final int i = 3;
并在conso中显示乐。 我得到了一样的字符串情况。为什么?
好的,非常感谢!怎么样int? public static final int i = 3; //不会写类已经加载 public static final Integer i = 3; //写入类已加载 – idmitriev
请阅读我在答案中链接到的编译时常量表达式的定义。 'int'是一个原始值,'String'是引用类型值的唯一特例,它可以包含在常量表达式中,而'Integer'既不是。 –
@marko - 你告诉我,A类没有被装入吗?或者它是懒惰初始化的情况? – TheLostMind