3 回答

TA贡献1798条经验 获得超3个赞
如果您有启动您的程序-enableassertions(或-ea简称),那么这种说法
assert cond;
相当于
if (!cond)
throw new AssertionError();
如果不使用此选项启动程序,则assert语句将无效。
例如assert d >= 0 && d <= s.length();,如张贴在你的问题,相当于
if (!(d >= 0 && d <= s.length()))
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的错误消息。

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