Who can explain what's going on?
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;
}
Console :
final
What's it? I don't understand why the class has not been loaded, I know classes always load at the first call. Field s
is in pool of string, I see that final modifier is magic.
If I delete final modifier (public static String s = "final"
) I will get
Console :
class has been loaded
final
Note: I have changed field i
: public static final int i = 3;
and show it in console.
I got the same as in String situation. Why?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…