0

我试图使用断言 stmt 来检查一个值是否大于 1,但它没有按预期工作。

public class asserttest {
    static void methoda(int i){
        assert (i > 1);
        System.out.println("This is methoda");
    }
    public static void main(String[] args){
        methoda(-1);
    }
}

输出:这是方法a

预期输出:- 断言错误

我能够通过启用断言来修复它。

4

2 回答 2

2

我的猜测是,您对默认情况下未启用的断言感到困惑。使用-enableassertions命令行选项:

java -enableassertions asserttest

您还可以将断言限制为特定的包,并指定要禁用的包-disableassertions

就我个人而言,我更喜欢无条件地验证参数值,正是因为如此——我不喜欢在测试中以“安全”模式运行代码,然后在安全关闭的情况下让它在生产中松动。这就像学习系上安全带驾驶,然后在没有任何保护的情况下参加 F1 比赛......

于 2013-09-18T14:25:00.480 回答
0

一般来说,您不应该对参数或任何输入值使用断言。

断言旨在描述应始终为的不变量true。因此,可以出于性能原因将它们关闭。您必须启用它们,例如使用-eaJVM 选项。

但是应始终检查方法的输入,因此请使用

if(i<=1) throw new IllegalArgumentException("i must be >1");
于 2013-09-18T14:27:52.490 回答