这个程序是 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来说这是一个问题?
最佳答案
I don't understand why it would be a problem if an instance of
One
is created.
因为 One
包含一个 assert
,在实例化时保证会失败(并且这些选项在 args
中传递); 0 != 1
中
class One {
int x = 0;
{
assert x == 1;
}
}
此外,在选项 B
中未启用断言,在选项 G
中断言仅在类 Two
中启用(有问题的断言是在 One
类中)。
关于java - 无法理解java断言机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30553794/