二级java程序设计--异常与断言

来源:互联网 发布:js仿ios选择器 编辑:程序博客网 时间:2024/06/06 04:56
异常与断言
掌握分析与学习目的
1.掌握java异常机制的处理方法
2.了解断言的作用
一.概述
1.java的异常机制:一旦出现异常,可以由运行的方法或由虚拟机生成一个异常对象,包含异常事件的类型以及发生异常时程序的状态等信息。
2.java的类库中提供一个Throwable类,所有的异常对象都必须是它的实例或它子类的实例。Throwable类中的方法对抛出异常进行描述。
3.Error类包括动态连接失败,硬件设备等不可查的严重错误这类异常都有java语言来抛出和捕获。
4.编程者需要抛出和捕获的都是Exception这类异常。
二.异常处理类型:捕获异常和声明抛出异常。
1.捕获异常:要求在程序的方法中预先声明,在调用方法时用try{}actch(){}[finally{}]程序块捕获并处理。
2.声明抛出异常用throws子句声明并用throw语句抛出异常到调用方法中。
3.自定义异常:要求所定义的异常类必须是Exception的子类。
public class ThrowableException{public static void main(String[] args){try{throw new Throwable("My Exception");}catch(Throwable e){System.out.println("e.getMessage:"+e.getMessage);System.out.println("e.printStackTrace():");e.printStackTrace();}}}
三.异常处理编程的提醒
1.finally语句:捕获异常的统一出口
2.异常处理的原则
(1)在捕获或声明异常时,应注意选择适当的异常类,选择适当的地方处理,是在方法内处理还是用throws子句传递给调用栈的上层。
(2)把异常处理的代码与正常的代码分开。
(3)利用finally语句作为异常处理的统一接口。
(4)能用简单测试不要用异常控制,对异常不要过分细化,也不要压制。
四.断言:对布尔表达式进行检查,一个正确的程序必须保证这个布尔表达式的值为true。若该值为false,说明程序已经处于不正确的状态,系统将给出警告或退出。
一般来说,断言用于保证程序最基本,关键的正确性。断言检查通常在开发和测试时开启。
1.语法:两种语法格式:
assert <boolean_expression>;
assert <expression1>:<expression2>
第二种格式的expression2可以是任何对象或原始类型(包括null),若表达式为false,就引发AssertionError。不要捕获该错误,否则程序会异常停止。
2.使用:一般用于检查一些关键的值,并且这些值对程序或者局部功能有很大的影响。并且这种错误不容易恢复。
(1)内在不变式:在确信某种情况总存在时编码,就可用内在不变式断言来保证假设的正确性。如:
if(x>0){//do something}else{assert(x == 0);//do something 否则x为负}
(2)控制流不变式
switch(x){case 1://...;break;case 2://...;break;case 3://...;break;default:assert false:"x value is invalid:"+x;break;}
假设x值为0且不可能为负,x出现负值时程序肯定错误。若代码中用断言,保证x出现负值时就会报告。
(3)什么情况下不要使用断言
1 作为公共方法的参数检查,永远要求执行。若用断言,在关闭断言时无法执行。
2 不要使用断言语句去修改变变量和改变方法的返回值。
小结:断言不应该用于验证程序的正确与否,而是验证方法是否满足预期结果。