为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕工程0101907 2019-11-06 11:01:27
怎么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);}
查看完整描述

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的错误消息。


查看完整回答
反对 回复 2019-11-06
?
隔江千里

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(最坏的情况),它将停止应用程序并向您抛出错误以查找它。


查看完整回答
反对 回复 2019-11-06
  • 3 回答
  • 0 关注
  • 683 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信