无法理解Java断言机制

截拳师

该程序是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会有问题?

艾略特新鲜

我不明白,如果One创建的实例,为什么会有问题

因为One包含一个assert在实例化时肯定会失败的(并且这些选项会传入args);0 != 1

class One {
    int x = 0;
    {
        assert x == 1;
    }
}

此外,B未启用inG断言,而in断言仅在类中启用Two(而有问题的断言在class中One)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章