Java的异常机制:
Java的异常机制主要依赖于:try 、 catch、finally、throw和throws 五个关键字。
其中:
try关键字后紧跟一个花括号括起来的代码块,简称try块,它里面放置可能引发异常的代码。
catch关键字后对应异常类型和一个代码块,用于表明该catch块用于处理这种类型的代码块。
finally块用于回收再try块中打开的物理资源,异常机制会保证finally块总被执行。
throws关键字主要在方法签名中使用,用于表明该方法可能抛出的异常。
throw 关键字用于抛出一个实际的异常,throw可以作为一个单独的语句使用,抛出一个具体的异常对象。
二、
“
Java的异常处理机制可以让程序具有更好的容错性,让程序更加健壮。
当程序运行出现意外情形时,系统会自动生成一个Exception对象来通知程序,
从而实现将“业务功能实现代码”和“错误处理代码”分离,提供更好的可读性。
”
问题: 那么,Java异常机制要怎么设计才能实现把 “业务功能实现代码”和“错误处理代码”分离呢?
分析:
即:如果程序一切正常就执行业务实现逻辑,否则即:如果出现了异常情况,就执行错误处理逻辑
我们用一段伪码描述:
if(一切正常)
{
执行业务实现代码;
}else {
执行错误处理逻辑代码;
}
为了描述上面的功能,Java是是这样做的:java 定义了try 和catch关键字。把系统的业务实现代码放在try块中,把异常处理逻辑放在catch块中进行处理。
try{
执行业务实现代码;
}catch(Exception e){
执行错误处理逻辑代码;
}
三、异常对象
如果执行try块里的业务实现逻辑代码时出现异常,系统自动生成一个异常对象,
该对象被提交给Java运行时环境,这个过程被称为抛出(throw)异常。
当Java运行时环境受到异常对象时,会寻找能处理该异常对象的catch块,
如果找到合适的catch块,就把该异常对象交给该catch块处理。
如果Java运行时环境找不到捕获异常的catch块,则运行时环境终止,Java程序也将退出。
Java处理异常的工作流程:
1.如果执行try块里的业务逻辑代码块时出现异常,系统就会自动生成一个异常对象,
该对象被提交给Java运行时环境。即:抛出异常对象。
2.当Java运行时环境受到异常对象后,会依次判断该异常对象是否是catch块后异常类或其子类
的实例对象,如果是,Java运行时环境将调用该catch块来处理该异常;
否则,就再次判断该异常和下一个catch块里的异常类进行比较。
3.如果匹配之后,
如果匹配之后,程序就会进入到负责异常处理的catch块,系统生成的异常对象ex将会传给catch块后的异常形参,
从而允许catch块通过该对象来获得异常的详细信息。
注意:
try块后可以有多个catch块,try块后使用多个catch块是为了针对不同异常类提供
不同的异常处理方式。当系统发生不同意外情况时,系统
会生成不同的异常对象,Java运行时环境就会根据该异常对象所属的异常类来决定
来决定使用哪个catch块来处理该异常。
4.如果Java运行时环境找不到捕获该异常的catch块,则运行时环境终止,Java程序也将自动退出。
四、
注意在安排catch块时,要注意的要点:先处理小异常,再处理大异常。
实际上,在进行异常捕获时,不仅应该吧Exception对应的catch块放在最后,
所有父类异常的catch块都应该放在子类异常的catch块的后面,简称为:先处理小异常,再处理大异常,
否则将出现编译错误。
5.访问异常信息:
如果我们要访问异常信息,可以通过调用该异常对象的相关方法来实现。
所有的异常对象都包含如下几个常用方法:
getMessage(); ----- 返回该异常的详细描述字符串。
printStackTrace() ----将该异常的跟踪栈信息输出到标准错误输出。
printStackTrace(PrintStream s) ------将该异常的跟踪栈信息输出到指定输出流
getStackTrace() ------ 返回该异常的跟踪栈信息
|
|