JAVA断言
来源:互联网 发布:猎头骗阿里程序员 编辑:程序博客网 时间:2024/05/16 15:40
断言机制:
-----------------------------------------------------------------------------
是检查语句,主要用于程序调试目的。
1.断言机制在用户定义的boolean表达式结果为false时抛出一个error对象,其类型为AssertionError;
2.当我们需要在约定的条件不成立时中断当前操作的话,可以使用断言;
3.作为Error的一种,断言失败也不需要捕获处理或者声明抛出,一旦出现了则终止程序、不必进行补救或恢复;
java运行时环境默认设置为关闭断言功能,所以在使用断言之前,需要在运行java程序时先开启断言功能。
开启:java -ea MyAppClass或者java -enableassertions MyAppClass
关闭:java -da MyAppClass或者java -disableassertions MyAppClass
用法1:assert <boolean表达式>
eg:
public class TestAssertion{
}
执行java -ea TestAssertion运行结果:
Exception in thread "main" java.lang.AssertionError
执行java -da TestAssertion运行结果:
您的年龄:-12
用法2:assert <boolean表达式>:<表达式2>
eg:
public class TestAssertion{
}
执行java -ea TestAssertion运行结果:
Exception in thread "main" java.lang.AssertionError:年龄超出合理范围!
执行java -da TestAssertion运行结果:
您的年龄:-12
断言的副作用:
----------------------------------------------------------------------------
由于程序员的问题,断言的使用可能会带来副作用 ,例如:
boolean isEnable=false;
//...
assert isEnable=true;
这个断言的副作用是因为它修改了程序中变量的值并且未抛出错误,这样的错误如果不细心的检查是很难发现的。但是同时我们可以根据以上的副作用得到一个有用的特性,根据它来测试断言是否打开。
public class AssertExampleTwo{
public static void main(String args[]){
boolean isEnable=false;
//...
assert isEnable=true;
if(isEnable==false){
throw new RuntimeException("Assertion shoule be enable!");
}
}
}
何时需要使用断言:
1.可以在预计正常情况下程序不会到达的地方放置断言 :assert false
2.断言可以用于检查传递给私有方法的参数。(对于公有方法,因为是提供给外部的接口,所以必须在方法中有相应的参数检验才能保证代码的健壮性)
3.使用断言测试方法执行的前置条件和后置条件
4.使用断言检查类的不变状态,确保任何情况下,某个变量的状态必须满足。(如age属性应大于0小于某个合适值)
什么地方不要使用断言:
断言语句不是永远会执行,可以屏蔽也可以启用
因此:
1.不要使用断言作为公共方法的参数检查,公共方法的参数永远都要执行
2.断言语句不可以有任何边界效应,不要使用断言语句去修改变量和改变方法的返回值
- JAVA 断言
- Java 断言
- Java 断言
- JAVA断言
- java 断言
- java断言
- Java断言
- 断言---java
- Java断言
- java断言
- java断言
- JAVA断言
- java 断言 assert 初步使用:断言开启、断言使用
- java 断言 assert 初步使用:断言开启、断言使用
- java 断言 assert 初步使用:断言开启、断言使用
- java 断言 assert 初步使用:断言开启、断言使用
- java 断言 assert 初步使用:断言开启、断言使用
- java 断言 assert 初步使用:断言开启、断言使用
- 第1周项目5-图书馆的书
- vs打包exe的详细步骤带图,非常好的一篇文章
- linux中 struct file 和 struct inode简介
- Android受限广播保护机制
- IE下margin:0 auto不居中怎么办
- JAVA断言
- osg设置透明
- Java DB官方技术手册合集(英文版)
- mysql查询今天,昨天,近7天,近30天,本月,上一月数据方法
- FilterDispatcher已被标注为过时解决办法 >>> FilterDispatcher <<< is deprecated!
- js准确求字符串长度
- 关于倒计时new Date().getTime()出现NaN
- 学习中总结到的url地址
- web初学者的position:absolute;小理解