Java头歌类与对象,最后一关,最后一题
class MyClass {
static int i = 10;
static {
i = 20;
System.out.println("In Static");
}
public MyClass() {
System.out.println("MyClass()");
}
public MyClass(int i) {
System.out.println("MyClass(int)");
this.i = i;
}
}
public class TestMain {
public static void main(String args[]) {
MyClass mc1 = new MyClass();
System.out.println(mc1.i);
MyClass mc2 = new MyClass(10);
System.out.println(mc2.i);
}
}
上述代码的运行结果是:()
A、
MyClass() 20 MyClass(int) 10
B、
In Static MyClass() 20 MyClass(int) 10
C、
In Static MyClass(int) 20 MyClass() 10
D、
In Static MyClass() 10 MyClass(int) 20
答案:B
解析:静态代码块的执行顺序高于非静态代码块,高于构造方法;且静态代码块只在类被加载时执行,且只执行一次;因此,在mc1被创建时,静态代码块先被执行,输出In Static,i=20;接着构造方法被调用,输出MyClass();i此时等于20;因为静态代码块只执行一次,所以,在创建mc2时,静态代码块不会再执行,而是直接执行含参的构造方法,输出 MyClass(int),i=10
3万+

被折叠的 条评论
为什么被折叠?



