使用try...catch的处理异常机制
2016-11-29 19:05
525 查看
使用try...catch的处理异常机制
Java的异常处理可以让程序具有更好的容错性,程序更加健壮。当程序运行出现意外情形时,系统会自动生成一个Exception对象来通知程序。
实现原理:如果try语句块中的业务逻辑代码在运行时出现了异常,系统自动生成一个异常对象,该异常对象被提交给Java运行时环境,这个过程被称为抛出异常。当Java运行时环境收到异常对象时,会寻找处理该异常对象的catch块,如果找到合适的catch块并把该异常对象交给catch块处理,这个过程被称为捕获异常;如果Java运行时环境找不到捕获异常的catch块,则运行时环境终止,Java程序也将退出。
try语句块后可以有多个catch块,这是为了针对不同异常类提供不同的异常处理方式。当系统发送不同异常情况时,系统会生成不同的异常对象,Java运行时环境就会根据该异常对象所属的异常类来决定使用那个一个catch语句块进行处理该异常。当Java运行时环境接受到异常对象后,会依次判断该异常对象是否是catch块后异常类或其子类的实例,如果是,Java运行时环境将调用该catch块来处理该异常;否则再次拿该异常对象和下一个catch块里的异常类进行比较。
Java提供了丰富的异常类,下面显示了Java常见的异常类直接的继承关系图:
Java把所有非正常情况分为两种:异常(Exception)和错误(Error),他们都继承Throwable父类。
Error错误:一般是指虚拟机相关的问题,如系统崩溃,虚拟机出错、动态链接失败等,这种错误无法恢复或不可能捕获,将导致引用程序中断。通常应用程序无法处理这些错误。
注意:对程序进行异常捕获时,一定是先捕获小的异常,再捕获大的异常。
访问异常信息
如果程序需要在catch代码块中访问异常对象的相关信息,可以通过调用catch语句块中的异常形参的方法来获取异常信息,当Java运行时决定调用某个catch语句块来处理该异常对象时,会将该异常对象赋给catch块后的异常参数,程序就可以通过该参数来获得异常的相关信息。
异常对象常用的几个方法:
(1)getMessage():返回该异常的详细描述字符串。
(2)printStackTrace():将该异常的跟踪栈信息输出到标准错误输出。
(3)printStackTrace(PrintStream s):将该异常信息的跟踪栈信息输出到指定输出流。
(4)getStackTrace():返回该异常的跟踪栈信息。
使用finally回收资源
Java异常处理的完整语法结构是
try {
//业务代码(可能报异常的代码)
} catch (NullPointerException e) {
// 异常处理块1
}catch(Exception e2){
//异常处理块2
}finally{
//资源回收块
}
finally语句块主要作用是回收资源,比如:关闭数据库连接,网络连接,磁盘文件,输入输出流等等。这些资源必须显示的回收,Java的垃圾回收机制不会回收任何物理资源,它只回收堆内存中对象所占用的内存。
无论try语句块中的代码是否出现异常,也不管catch块中的代码是否执行,finally中的代码块都会被执行。
Java的异常处理可以让程序具有更好的容错性,程序更加健壮。当程序运行出现意外情形时,系统会自动生成一个Exception对象来通知程序。
实现原理:如果try语句块中的业务逻辑代码在运行时出现了异常,系统自动生成一个异常对象,该异常对象被提交给Java运行时环境,这个过程被称为抛出异常。当Java运行时环境收到异常对象时,会寻找处理该异常对象的catch块,如果找到合适的catch块并把该异常对象交给catch块处理,这个过程被称为捕获异常;如果Java运行时环境找不到捕获异常的catch块,则运行时环境终止,Java程序也将退出。
try语句块后可以有多个catch块,这是为了针对不同异常类提供不同的异常处理方式。当系统发送不同异常情况时,系统会生成不同的异常对象,Java运行时环境就会根据该异常对象所属的异常类来决定使用那个一个catch语句块进行处理该异常。当Java运行时环境接受到异常对象后,会依次判断该异常对象是否是catch块后异常类或其子类的实例,如果是,Java运行时环境将调用该catch块来处理该异常;否则再次拿该异常对象和下一个catch块里的异常类进行比较。
Java提供了丰富的异常类,下面显示了Java常见的异常类直接的继承关系图:
Java把所有非正常情况分为两种:异常(Exception)和错误(Error),他们都继承Throwable父类。
Error错误:一般是指虚拟机相关的问题,如系统崩溃,虚拟机出错、动态链接失败等,这种错误无法恢复或不可能捕获,将导致引用程序中断。通常应用程序无法处理这些错误。
注意:对程序进行异常捕获时,一定是先捕获小的异常,再捕获大的异常。
访问异常信息
如果程序需要在catch代码块中访问异常对象的相关信息,可以通过调用catch语句块中的异常形参的方法来获取异常信息,当Java运行时决定调用某个catch语句块来处理该异常对象时,会将该异常对象赋给catch块后的异常参数,程序就可以通过该参数来获得异常的相关信息。
异常对象常用的几个方法:
(1)getMessage():返回该异常的详细描述字符串。
(2)printStackTrace():将该异常的跟踪栈信息输出到标准错误输出。
(3)printStackTrace(PrintStream s):将该异常信息的跟踪栈信息输出到指定输出流。
(4)getStackTrace():返回该异常的跟踪栈信息。
使用finally回收资源
Java异常处理的完整语法结构是
try {
//业务代码(可能报异常的代码)
} catch (NullPointerException e) {
// 异常处理块1
}catch(Exception e2){
//异常处理块2
}finally{
//资源回收块
}
finally语句块主要作用是回收资源,比如:关闭数据库连接,网络连接,磁盘文件,输入输出流等等。这些资源必须显示的回收,Java的垃圾回收机制不会回收任何物理资源,它只回收堆内存中对象所占用的内存。
无论try语句块中的代码是否出现异常,也不管catch块中的代码是否执行,finally中的代码块都会被执行。
相关文章推荐
- Java异常处理机制以及try-catch-finally-return执行顺序
- js中的异常处理try...catch使用介绍
- js中的异常处理try...catch使用介绍
- js中的异常处理try...catch使用介绍
- Java异常处理(try、catch、finally使用)
- java:异常处理机制 try-catch-throw-finally
- 转载:Java的异常处理机制:try、catch、finally、throw、throws
- C#中使用try{}catch{}finally{}对系统性能的影响和处理机制(摘录)
- Java语言如何进行异常处理,关键字:throws、throw、try、catch、finally分别如何使用?
- 异常处理try...catch(sql 2005版本以上可以使用)
- IOS开发之--异常处理--使用try 和 catch 来捕获错误。
- Java中异常处理之try和catch代码块的使用
- js中的异常处理try...catch使用介绍
- js中的异常处理try...catch使用介绍
- java异常处理机制(try-catch-finally)
- JAVA异常处理机制的个人理解(try catch throw finally)
- JavaScript可以使用try...catch来进行异常处理
- sql server try...catch使用 异常处理 不错的SQL错误处理
- JAVA学习笔记25——异常机制1:Exception简介+异常处理的try_catch_finally方法
- 使用try-with-resource改进代码异常处理机制