猿问

“ assert”关键字有什么作用?

怎么assert办?例如在函数中:


private static int charAt(String s, int d) {

    assert d >= 0 && d <= s.length();

    if (d == s.length()) return -1;

    return s.charAt(d);

}


慕工程0101907
浏览 684回答 3
3回答

呼如林

如果您有启动您的程序-enableassertions(或-ea简称),那么这种说法assert cond;相当于if (!cond)&nbsp; &nbsp; throw new AssertionError();如果不使用此选项启动程序,则assert语句将无效。例如assert d >= 0 && d <= s.length();,如张贴在你的问题,相当于if (!(d >= 0 && d <= s.length()))&nbsp; &nbsp; throw new AssertionError();(如果您启动的-enableassertions是。)Java语言规范assert正式为:14.10。该声明说:14.10。的assert声明的断言是一个assert含有一个布尔表达式语句。一个断言启用或者禁用。如果启用了断言,则断言的执行将导致对布尔表达式进行求值,并且如果表达式的求值为,则会报告错误false。如果断言被禁用,则断言的执行不起作用。当“启用或禁用”控制与-ea开关和“报告错误”意味着AssertionError被抛出。最后,一个鲜为人知的功能assert:您可以: "Error message"像这样追加:assert d != null : "d is null";指定应该抛出什么AssertionError的错误消息。

隔江千里

尽管我已经阅读了很多有关此文档的文档,但是我仍然对如何,何时以及在何处使用它感到困惑。使它很容易理解:当您遇到类似情况时:&nbsp; &nbsp; String strA = null;&nbsp; &nbsp; String strB = null;&nbsp; &nbsp; if (2 > 1){&nbsp; &nbsp; &nbsp; &nbsp; strA = "Hello World";&nbsp; &nbsp; }&nbsp; &nbsp; strB = strA.toLowerCase();&nbsp;您可能会收到警告(在strB = strA.toLowerCase()上显示黄线),该警告可能会给strB产生NULL值。尽管您知道strB最终绝对不会为null,以防万一,您可以使用assert来1.禁用警告。2.如果发生最坏的事情(运行应用程序时),将引发Exception错误。有时,当您编译代码时,不会得到结果,这是一个错误。但是应用程序不会崩溃,并且您花费大量时间来查找导致此错误的原因。因此,如果您将assert设置为:&nbsp; &nbsp; assert strA != null; //Adding here&nbsp; &nbsp; strB = strA .toLowerCase();您告诉编译器strA绝对不是空值,它可以“和平地”关闭警告。如果它为NULL(最坏的情况),它将停止应用程序并向您抛出错误以查找它。
随时随地看视频慕课网APP

相关分类

Java
我要回答