这个程序是SCJP问题书中的一个问题
class One {
int x = 0;
{
assert x == 1;
}
}
public class Two {
public static void main(String[] args) {
int y = 0;
assert y == 0;
if(args.length > 0)
new One();
}
}
以下哪项会毫无错误地运行? 给出的选项是
A. java Two
B. java Two x
C. java -ea Two
D. java -ea Two x
E. java -ea:One Two
F. java -ea:One Two x
G. java -ea:Two Two x
正确的选项是A,B,C,E和G
D和F不正确的原因是,创建了One
的实例。如果创建One
的实例,我不明白为什么会出现问题。
在选项B和G中,还创建了One
的实例,那么为什么它对D和F来说是个问题?
答案 0 :(得分:2)
为了让断言做任何事情,必须启用它。 A和B根本没有启用断言。 G只为类\s
启用了它们。
D和F都为类Two
启用了断言并创建了一个实例。
答案 1 :(得分:2)
我不明白为什么如果创建
One
的实例会出现问题。
因为One
包含assert
,但在实例化时会保证失败(并且这些选项会在args
中传递);
0 != 1
class One {
int x = 0;
{
assert x == 1;
}
}
此外,在选项B
中,未启用断言,并且在选项G
中,断言仅在类Two
中启用(并且有问题的断言在类One
中)。