Core Java (十八) 断言

释放双眼,带上耳机,听听看~!

在Java中,有三种处理错误的机制:抛出一个异常,日志,使用断言。

断言机制允许在测试期间向代码中插入一些检查语句。当代码发布时,这些插入的检测语句将会被自动地移走。

断言只应用在测试阶段确定程序内部的错误位置。

assert有两种形式:

  1. assert 条件;
  2. assert 条件:表达式;

这两种形式都会对条件进行检测,如果条件为false,就会抛出一个AssertionError异常。在第二种形式中,表达式将被传入AssertionError的构造器,并转换成一个消息字符串。表达式的唯一目的是产生一个消息字符串。

在命令行中使用断言:

在启用或者禁用断言时不需要重新编译代码。

只要在运行时键入如下命令:

java -ea MyApp  或者  java -enableassertions MyApp,

就会启用断言。

只要在运行时键入如下命令:

java -da MyApp  或者  java -disableassertions MyApp,

就会禁用断言。

启用或者禁用断言是class loader(类加载器)的功能。当断言被禁用时,类加载器将跳过断言代码,不会降低程序的运行速度。

在Eclipse中使用断言:

在菜单中,选择Run->Run Configuration,其中的Argument选项卡,按下图输入:

Core Java (十八) 断言

这样就开启了断言。

一定要记住,断言仅仅是测试和调试阶段所使用的战术性工具,而日志记录是一种在程序的整个生命周期中都可以使用的策略性工具。

使用断言的规则:

1.不要使用断言验证公共方法的参数。 
2.可以使用断言验证私有方法的参数。 
3.不要使用断言验证命令行参数 
4.在公共方法内,可以使用断言检查从不会发生的情况

5.不要使用可能产生副作用的断言,也就是断言表达式应该使程序保持在进入它之前的状态。
 

例如一道题目:

QUESTION 43
Given:
11. public void go(int x) {
12. assert (x > 0);
13. switch(x) {
14. case 2: ;
15. default: assert false;
16. }
17. }
18. private void go2(int x) { assert (x < 0); }
Which statement is true?
A. All of the assert statements are used appropriately.
B. Only the assert statement on line 12 is used appropriately.
C. Only the assert statement on line 15 is used appropriately.
D. Only the assert statement on line 18 is used appropriately.
E. Only the assert statements on lines 12 and 15 are used appropriately.
F. Only the assert statements on lines 12 and 18 are used appropriately.
G. Only the assert statements on lines 15 and 18 are used appropriately.

选择D。

对于第12行,assert不能检测公共方法的参数,违反了原则4

15行,assert肯定会发生,不会回到之前的状态,违反了原则5

18行符合原则2。

参考资料:http://tanjunxiaoge.iteye.com/blog/1756186

给TA打赏
共{{data.count}}人
人已打赏
安全技术

Bootstrap框架之排版

2021-12-21 16:36:11

安全技术

从零搭建自己的SpringBoot后台框架(二十三)

2022-1-12 12:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索