assert有什么作用:
断言作为一种软件调试方法,提供了一种在diamante中进行正确性检查的机制。 assert的作用: 对一个boolean表达式进行检查,一个正确运行的程序保证boolean值为true,若为false,则说明程序不正确,系统需要提供警告信息并且退出程序。assert包括两种表达式:
assert expression1assert expression1:expression2
其中expression1表示一个boolean表达式,expression2表示一个基本类型或者一个对象
开启断言功能(默认断言关闭):
java -ea TestAssert(ea:enable和assertions的缩写)
java -enableassertions TestAssert
下面让我们来举个栗子熟悉一下assert:
assert 1+1==2;
System.out.println("assert1 ok");
assert 1+1==3:"assert faild out";
System.out.println("assert 2 ok");
对于上述代码,当程序执行javac Test.java 与java Test:
运行结果:
assert1 ok
assert2 ok
/*未开启断言时,程序无需判断1+1==2,也无需判断1+1==3是对是错,只需要按照一般流程走,
所以程序输出如上结果*/
对于上述代码,当程序执行javac Test.java 与java -ea Test (开启):
assert1 ok
Exception in thread "main" Java.Lang.AssertionError:assert faild exit
at Test.main(Test.java5);
/*开启断言之后,程序判断boolean表达式的值是否为true,如果为true,则继续执行,
如果为false,系统需要提供警告信息并且退出程序,所以当判断1+!=3时,表达式的值为false,
程序提供异常信息并且退出,如上结果所示。*/
由此我们也可以看出来:
(1):java是在运行开启assert.(区别于C语言编译期间开启)
(2):java使用assert关键字来实现其功能。(区别于C语言的库函数)
并且,虽然assert的功能与if判断类似,但是二者存在本质性的区别:assert一般用于调试程序,如果不小心用它来控制流程的业务流程,那在调试之后去掉assert就意味着修改了程序的正常逻辑,而if随机逻辑判断,本身就是用来控制程序流程的
assert的应用范围:
(1):检查控制流
(2):检查输入参数是否有效
(3):检查函数结果是否有效
(4):检查程序不变量
在实际的开发中,assert用来保证程序的正确性,通常开发和测试使用,为了提高效率,软件发布后,assert默认关闭。