Java多层嵌套异常处理的基本流程
异常是程序中的⼀些错误,但并不是所有的错误都是异常,错误有时候是可以避免的。异常的对象有两个来源,⼀是Java运⾏时环境⾃动抛出系统⽣成的异常,⽽不管你是否愿意捕获和处理,它总要被抛出!⽐如除数为0的异常。⼆是程序员⾃⼰抛出的异常,这个异常可以是程序员⾃⼰定义的,也可以是Java语⾔中定义的,⽤throw 关键字抛出异常,这种异常常⽤来向调⽤者汇报异常的⼀些信息。
异常是针对⽅法来说的,抛出、声明抛出、捕获和处理异常都是在⽅法中进⾏的。
Java异常处理通过5个关键字try、catch、throw、throws、finally进⾏管理。基本过程是⽤try语句块包住要监视的语句,如果在try语句块内出现异常,则异常会被抛出,你的代码在catch语句块中可以捕获到这个异常并做处理;还有以部分系统⽣成的异常在Java运⾏时⾃动抛出。你也可以通过throws关键字在⽅法上声明该⽅法要抛出异常,然后在⽅法内部通过throw抛出异常对象。finally语句块会在⽅法执⾏return之前执⾏。
使⽤atch捕获异常。
执⾏try块⾥的业务逻辑代码时出现异常,系统⾃动⽣成⼀个异常对象,该异常对象被提交给Java运⾏时环境,这个过程被称为抛出(throw)异常。Java运⾏时环境收到异常对象时,会寻能处理该异常对象
的catch块,如果到合适的catch块并把该异常对象交给catch 块处理那这个过程被称为捕获(catch)异常;如果Java运⾏时环境不到捕获异常的catch块,则运⾏时环境终⽌,Java程序也将退出。
Java的异常体系:
try catch的使用方法
访问异常讯息。
如果程序需要在catch块中访问遗常对象的相关信息,可以通过调⽤catch后异常形参的⽅法来获得。当Java运⾏时决定调⽤某个catch块来处理该异常对象时,会将该异常对象赋给catch块后的异常参数,程序就可以通过该参数来获得该异常的相关信息。所有的异常对象都包含了如下⼏个常⽤⽅法:getMessage():返回该异常的详细描述字串。printStackTrace():将该异常的跟踪栈信息输出到标准错误信息输出。printStackTrace(PrintStream s):将该异常的跟踪栈信息输出到指定输出流。getStackTrace():返回该异常的跟踪栈信息。
异常处理:
try
{
需要检测的代码;
}
catch(异常类变量)
{
异常处理代码;
}
finally
{
⼀定会执⾏的代码;
}
异常处理的嵌套。
异常处理流程代码可以放在任何能放可执⾏性代码的地⽅,因此完整的异常处理流程既可放在try块⾥,也可放在catch块⾥,也可放在finally块⾥。
异常处理嵌套的深度没有明确的限制,但通常没有必要使⽤超过两层的嵌套异常处理,层次太深的嵌套异常处理没有太⼤必要,⽽且导致程序可读性降低。
checked异常与Runtime异常:
Java的异常被分为两⼤类:Checked异常和Runtime异常(运⾏时异常)。所有RuntimeException类及其⼦类的实例被称为Runtime异常;不是RuntimeException类及其⼦类的异常实例则被称为Checked异常。
Checked异常的处理:
当前⽅法明确知道如何处理该异常,程序应该使⽤atch块来捕获该异常,然后在对应的catch块中修改该异常。当前⽅法不知道如何处理这种异常,应该在定义该⽅法时声明抛出该异常。
Runtime异常的处理:
Runtime异常则更加灵活,Runtime异常⽆需显⽰声明抛出。如果程序捕捉Runtime异常,也可以使⽤atch块来捕捉Runtime异常。使⽤throws声明抛出异常:
throws声明抛出异常的思路是:当前⽅法不知道应该如何这种类型的异常,该异常应该由上⼀级调⽤者处理,如果main⽅法也不知道应该如何处理这种类型的异常,也可以使⽤throws声明抛出异常,该异常交给JVM处理。JVM对异常的处理⽅法是:打印异常跟踪栈信息,并中⽌程序的运⾏,这就是程序在遇到异常后⾃动结束的原因。
throws声明抛出只能在⽅法签名中使⽤,throws可以声明抛出多个异常类,多个异常类之间以逗号隔开。
如果需要在程序中⾃⾏抛出异常,应使⽤throw语句,throw语句可以单独使⽤,throw语句抛出的不是异常类,⽽是⼀个异常实例,⽽且每次只能抛出⼀个异常实例。throw语句的语法格式如下:throw ExceptionInstance;
如果throw语句抛出的异常是Checked异常,则该throw语句要么处于try块⾥,显⽰捕获该异常,要么放在⼀个带throws声明抛出的⽅法中,即把该异常交给⽅法的调⽤者处理。
异常处理原则:
不要过度使⽤异常;
不要使⽤过于庞⼤的try块;
避免使⽤Catch AII 语句;
不要忽略捕获到异常。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。