問題:
public class InitializationOrder {
public static void main(String[] args) {
Subclass sb = new Subclass();
}
}
class Super{
static {
System.out.println(1);
}
Super(int i){
System.out.println(i);
}
}
class Subclass extends Super implements Interface{
static {
System.out.println(2);
}
Super su = new Super(4);
Subclass() {
super(3);
new Super(5);
}
}
interface Interface{
static Super su = new Super(0);
}
請教下為什么輸出沒有0. 難道接口中的成員變量不被實現時不初始化嗎?接口中的成員變量是在何時被初始化的?向各位請教了~
public class InitializationOrder {
public static void main(String[] args) {
Subclass sb = new Subclass();
}
}
class Super{
static {
System.out.println(1);
}
Super(int i){
System.out.println(i);
}
}
class Subclass extends Super implements Interface{
static {
System.out.println(2);
}
Super su = new Super(4);
Subclass() {
super(3);
new Super(5);
}
}
interface Interface{
static Super su = new Super(0);
}
請教下為什么輸出沒有0. 難道接口中的成員變量不被實現時不初始化嗎?接口中的成員變量是在何時被初始化的?向各位請教了~
所以不会输出0.可以在命令行里用java -verbose InitializationOrder 来运行这个程序, 会详细的列出来加载了哪些类与接口. 你会看到接口Interface根本没有被加载, 但是当你用一下里面的Interface.su, 然后就会加载了.