java 异常处理之断言
2014-11-08 23:48
169 查看
java中异常有三种处理方法:
1.抛出异常
2.使用断言
3.日志
本章只讨论异常处理的第二种方法:断言
JAVA是从JDK1.4才开始支持断言的(添加了关键字assert)
一.assert关键字语法很简单,有两种用法:
1、assert <boolean表达式>
如果<boolean表达式>为true,则程序继续执行。
如果为false,则程序抛出AssertionError,并终止执行。
2、assert <boolean表达式> : <错误信息表达式>
如果<boolean表达式>为true,则程序继续执行。
如果为false,则程序抛出java.lang.AssertionError,并输入<错误信息表达式>。
二.启动和关闭断言功能
在默认情况下,断言被禁用。可在程序运行时用 –ea 参数启用断言
用法:java –ea Test
在eclipse的IDE开发工具中,操作如下:
选择Run Configurations, 再如下:
设置完后,运行即可.
禁用断言语法如下:
java –da Test
三.何时用断言?
(1) 使用断言测试方法执行的前置条件和后置条件
(2)断言检查只用于开发和测试阶段
四.断言的副作用
由于程序员的问题,断言的使用可能会带来副作用 ,例如:
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.不要使用断言作为公共方法的参数检查,公共方法的参数永远都要执行
2.断言语句不可以有任何边界效应,不要使用断言语句去修改变量和改变方法的返回值
六.常见断言的特性
前置条件断言:代码执行之前必须具备的特性
后置条件断言:代码执行之后必须具备的特性
前后不变断言:代码执行前后不能变化的特性
七.使用断言需要注意的点
1、assert关键字需要在运行时候显式开启才能生效,否则你的断言就没有任何意义。而现在主流的Java IDE工具默认都没有开启-ea断言检查功能。这就意味着你如果使用IDE工具编码,调试运行时候会有一定的麻烦。并且,对于Java Web应用,程序代码都是部署在容器里面,你没法直接去控制程序的运行,如果一定要开启-ea的开关,则需要更改Web容器的运行配置参数。这对程序的移植和部署都带来很大的不便
2、用assert代替if是陷阱之二。assert的判断和if语句差不多,但两者的作用有着本质的区别:assert关键字本意上是为测试调试程序时使用的,但如果不小心用assert来控制了程序的业务流程,那在测试调试结束后去掉assert关键字就意味着修改了程序的正常的逻辑
3、assert断言失败将面临程序的退出。这在一个生产环境下的应用是绝不能容忍的。一般都是通过异常处理来解决程序中潜在的错误。但是使用断言就很危险,一旦失败系统就挂了
1.抛出异常
2.使用断言
3.日志
本章只讨论异常处理的第二种方法:断言
JAVA是从JDK1.4才开始支持断言的(添加了关键字assert)
一.assert关键字语法很简单,有两种用法:
1、assert <boolean表达式>
如果<boolean表达式>为true,则程序继续执行。
如果为false,则程序抛出AssertionError,并终止执行。
2、assert <boolean表达式> : <错误信息表达式>
如果<boolean表达式>为true,则程序继续执行。
如果为false,则程序抛出java.lang.AssertionError,并输入<错误信息表达式>。
二.启动和关闭断言功能
在默认情况下,断言被禁用。可在程序运行时用 –ea 参数启用断言
用法:java –ea Test
在eclipse的IDE开发工具中,操作如下:
选择Run Configurations, 再如下:
设置完后,运行即可.
禁用断言语法如下:
java –da Test
三.何时用断言?
(1) 使用断言测试方法执行的前置条件和后置条件
(2)断言检查只用于开发和测试阶段
四.断言的副作用
由于程序员的问题,断言的使用可能会带来副作用 ,例如:
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.不要使用断言作为公共方法的参数检查,公共方法的参数永远都要执行
2.断言语句不可以有任何边界效应,不要使用断言语句去修改变量和改变方法的返回值
六.常见断言的特性
前置条件断言:代码执行之前必须具备的特性
后置条件断言:代码执行之后必须具备的特性
前后不变断言:代码执行前后不能变化的特性
七.使用断言需要注意的点
1、assert关键字需要在运行时候显式开启才能生效,否则你的断言就没有任何意义。而现在主流的Java IDE工具默认都没有开启-ea断言检查功能。这就意味着你如果使用IDE工具编码,调试运行时候会有一定的麻烦。并且,对于Java Web应用,程序代码都是部署在容器里面,你没法直接去控制程序的运行,如果一定要开启-ea的开关,则需要更改Web容器的运行配置参数。这对程序的移植和部署都带来很大的不便
2、用assert代替if是陷阱之二。assert的判断和if语句差不多,但两者的作用有着本质的区别:assert关键字本意上是为测试调试程序时使用的,但如果不小心用assert来控制了程序的业务流程,那在测试调试结束后去掉assert关键字就意味着修改了程序的正常的逻辑
3、assert断言失败将面临程序的退出。这在一个生产环境下的应用是绝不能容忍的。一般都是通过异常处理来解决程序中潜在的错误。但是使用断言就很危险,一旦失败系统就挂了
相关文章推荐
- java异常处理机制示例(java抛出异常、捕获、断言)
- 浅析Java异常处理中断言的使用
- java异常处理机制示例(java抛出异常、捕获、断言)
- Java基础(九)异常处理和断言
- [转载]java异常处理的陋习展播
- 突破Java异常处理规则
- Thinking in Java第三版读书笔记-第九章:异常带来处理错误
- JAVA六种异常处理的陋习
- 彻底明白JAVA的异常处理 -3
- Java异常处理的陋习展播
- JAVA异常机制介绍/如何正确的进行JAVA异常处理
- JAVA一般异常处理
- Java异常处理之陋习展播
- Java异常处理之陋习展播
- java异常处理
- Java中的异常处理
- 关于六种Java异常处理程序的陋习
- Java异常处理之陋习展播
- [原创]打破Java异常处理规则
- Java异常处理的陋习展播