java异常结构中定义有throwable类,Exception和Error是其派生的两个子类。其中Exception表示由于非法情况导致的异常,Error表示java运行时候环境出现的错误。
异常处理的目的就是当异常发生时候妥善的终止程序,避免灾难性后果的发生,具体的操作通常包括:
l 通知:向用户通知异常对的发生
l 恢复:保存重要的数据,关闭文件,回滚事务等
l 退出:以恰当的形式退出程序
try语句指定了一段代码,改代码就是一次捕获和处理的范围,而它后面的catch语句对应这段代码可能抛出的所有异常进行相应的处理。
每个try语句块可以伴随多个catch语句,用于处理可能产生的不同类型的异常。在catch中声明的异常(cath(SomeException e))封装了异常事件发生的信息,在catch语句块中可以使用这个对象的一些方法获取这些信息,列入getMessage()方法获取有关异常的事件的信息,printStackTrace()方法用来跟踪异常事件发生时候执行堆栈的内容。
第一种场景,当程序发生错误但是无法处理的时候,会抛出这个异常。
第二种场景,主动自行抛出异常:thrown new ArithmeticException();
第三种场景,当异常处理自后,抛出,让下一层异常处理块来捕获。
主动抛出异常的例子。
try{
if(dblzero==0){
thrown new ArithmeticException();
}
}
cath(ArithmeticExepton){
发生除零异常
}
对象中有很多方法,这些方法中可能会因为某些错误而引发异常,但是不希望直接在这个方法中处理这些异常,而希望调用这个他的方法来统一处理。这时候可以使用throws关键字声明这个方法抛出的异常。格式为:
pubic static void stringToDate(String str) thows ParseException{
//
}
而在main方法中的调用为:
try{
StirngToDate(str);
}
catch(ParseException e){
e.printStackTrace():
}
finally语句为异常处理提供一个统一的出口,使得在控制流程转到程序其他部分一起,能够对程序的状态做统一的管理。换句话说,无论try语句所指定的程序中是否抛出例外,finally锁指定的代码都要被执行
因此,通常在finally语句中可以信息资源的消除工作,如关闭打开的文件,jdbc连接,删除临时文件等。
必须在try块之后添加catch或者finally块;可以嵌套try-catch-finally结构。
在try-cath-finnally中可以重新thown抛出异常,待其他catch语句处理。
注,以下情况程序在finally处会异常终止
l jvm过早终止
l finally块中抛出未处理的异常
java异常也可以分为:可检测异常(编译器强制处理的异常),非检测异常(如RuntimeException),自定义异常。
常见的RuntimeException有
l IllegalArgumentException
l NullPointerException
l ArrayIndexOutOfBoundsException
l ClassCastException
l NumberFormatException
在多个catch处理一系列异常,异常的大小关系,大类型的放在后面处理。
如果使用继承时,在父类别的某个方法上宣告了throws某些异常,而在子类别中重新定义该方法时,可以:
l 重写方法可以不处理异常(重新定义时候,不设定throwns)
l 重写方法可以可throws父方法的异常子类
l 重写方法可以throws父方法的某些异常
但是不可以:
l 重新方法throws父方法没有throws的异常
原文地址:http://blog.csdn.net/clark_xu/article/details/44018125