• ## 断言和异常
断言是用来检查非法情况而不是错误情况的,用来帮开发者快速定位问题的位置。
异常处理用于对程序发生异常情况的处理,增强程序的健壮性和容错性。
  • ## 断言的使用
在防御式编程中经常会用断言(Assertion)对参数和环境做出判断,避免程序因不当的输入或错误的环境而产生逻辑异常,断言在很多语言中都存在,C、C++、Python都有不同的断言表示形式。在Java中的断言使用的是assert关键字,其基本的用法如下:
assert <布尔表达式>
assert <布尔表达式> : <错误信息>

1. assert特性

(1)assert默认是不启用的
(2)assert抛出的异常AssertionError是继承自Error的

2. 使用assert的三种情况

(1)在私有方法中放置assert作为输入参数的校验
在私有方法中可以放置assert校验输入参数,因为私有方法的使用者是作者自己,私有方法的调用者和被调用者之间是一种弱契约关系,或者说没有契约关系,其间的约束是依靠作者自己控制的,因此加上assert可以更好地预防自己犯错,或者无意的程序犯错。
(2)流程控制中不可能达到的区域
这类似于JUnit的fail方法,其标志性的意义就是:程序执行到这里就是错误的,例如:
public void doSomething(){
2 int i = 7;
3 while(i >7){
4 /*业务处理*/
5 }
6 assert false:"到达这里就表示错误";
7 }
(3)建立程序探针
我们可能会在一段程序中定义两个变量,分别代表两个不同的业务含义,但是两者有固定的关系,例如var1=var2*2,那我们就可以在程序中到处设“桩”,断言这两者的关系,如果不满足即表明程序已经出现了异常,业务也就没有必要运行下去了。

3.断言方法说明

(1) notNull(Object object)
当 object 不为 null 时抛出异常,notNull(Object object, String message) 方法允许您通过 message 定制异常信息。和 notNull() 方法断言规则相反的方法是 isNull(Object object)/isNull(Object object, String message),它要求入参一定是 null;
(2) isTrue(boolean expression) / isTrue(boolean expression, String message)
当 expression 不为 true 抛出异常;
(3)notEmpty(Collection collection) / notEmpty(Collection collection, String message)
当集合未包含元素时抛出异常。
notEmpty(Map map) / notEmpty(Map map, String message) 和 notEmpty(Object[] array, String message) / notEmpty(Object[] array, String message) 分别对 Map 和 Object[] 类型的入参进行判断;
(4)hasLength(String text) / hasLength(String text, String message)
当 text 为 null 或长度为 0 时抛出异常;
(5)hasText(String text) / hasText(String text, String message)
text 不能为 null 且必须至少包含一个非空格的字符,否则抛出异常;
(6) isInstanceOf(Class clazz, Object obj) / isInstanceOf(Class type, Object obj, String message)
如果 obj 不能被正确造型为 clazz 指定的类将抛出异常;
(7) isAssignable(Class superType, Class subType) / isAssignable(Class superType, Class subType, String message)
subType 必须可以按类型匹配于 superType,否则将抛出异常;
使用 Assert 断言类可以简化方法入参检测的代码,如 InputStream getData(String file) 在应用 Assert 断言类后,其代码可以简化为以下的形式:
public InputStream getData(String file){
Assert.hasText(file,"file入参不是有效的文件地址");
① 使用 Spring 断言类进行方法入参检测

}

最新文章

  1. DAC Usage3:Monitor Data-tier Applications
  2. Android开发遇到的坑(1):Java中List的安全删除问题
  3. Unsupported major.minor version 51.0 在配置/运行Maven工程时,JDK与Maven所引用的jdk版本不一致
  4. 【c++】指针参数是如何传递内存的
  5. 缺少对象 WScript 问题解决方法
  6. [实战演练]python3使用requests模块爬取页面内容
  7. Filezilla Server日志文件
  8. vue keep-alive 实现详情返回列表保留页面数据
  9. mysql常见问题处理
  10. idea快捷键列表
  11. Redis入门到高可用(十八)—— 主从复制
  12. Spring 框架XML文件的配置文件
  13. oracle-rman-2
  14. 第九章&#160;词典 (c)散列:散列函数
  15. 牛客训练四:Applese 涂颜色(费马小定理+快速幂)
  16. 比較C struct 與 C# unsafe struct内存分佈
  17. Fiddler抓取HTTPS最全(强)攻略
  18. VUE输入框显示时自动聚焦
  19. spring cloud连载第三篇补充之Zuul
  20. CAS (2) —— Mac下配置CAS到Tomcat(客户端)

热门文章

  1. 解决eclipse端口被占用的问题
  2. Light OJ 1373 Strongly Connected Chemicals 二分匹配最大独立集
  3. jquery实现转盘抽奖
  4. Android 基于Http的多线程下载的实现
  5. uiautomator_python使用汇总
  6. PythonNET网络编程3
  7. 很吊炸天的Xcode插件,你想要的这都有
  8. amazeui学习笔记--css(HTML元素3)--表单Form
  9. 基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【三】VGG网络进行特征提取
  10. jQuery笔记---选择器(三)