Java异常处理

java异常体系:

Throwable是所有异常和错误的超类。两个子类Error和Exception分别表示错误和异常。Error是程序无法处理的,JVM一般会选择终止退出;Exception是程序可以捕获并处理的,Exception分为检查异常和非检查异常(也称运行时异常)。

  • Checked Exception:Java语言规定必须在程序中对Checked Exception进行处理,编译器会对此作出检查。
  • Runtime Exception:编译器不会检查程序是否对运行时异常做了处理,在程序代码中也不必捕获运行时异常的对象,也不必在方法体中声明抛出运行时异常。它表示的是编程发生了错误,需要去找出错误修改代码,而不是捕获异常。

java异常处理机制

  • try关键字: 后面紧跟一个代码块,try块放置可能引发异常的代码。
  • catch关键字: 对应一个异常类型和一个代码块,catch块中即是错误处理代码。
  • finally关键字: finally块总是在方法返回前执行,用于回收一些物理资源。
  • throw关键字: 抛出一个具体的异常对象。
  • throws关键字: 主要在方法签名中使用,用于声明可能抛出的异常。

java异常处理流程

  • 抛出(throw)异常:try块中的业务功能实现代码出现异常,系统自动生成一个异常对象,异常对象提交给Java运行时环境。
  • 捕获(catch)异常:Java运行时环境接收异常对象后,寻找处理该异常对象的catch块。

完整的异常处理语法

1.当前方法明确知道该如何处理异常,则程序应该使用try...catch块来捕获异常,然后在对应的catch块中修复异常。

try{
    //业务实现代码
}catch(SubException e){
    //异常处理代码
}finally{
    //异常发生,方法返回之前,总是要执行的代码
}

当Java程序执行try块、catch块时遇到return或者throw语句,系统不会立刻结束该方法,而是寻找异常处理流程是否包含finally块。如果没有包含finally块,程序立即执行return或者throw语句,方法终止;如果包含finally块,系统立即开始执行finally块,执行完finally块之后再次跳回来执行try块、catch块里的return或者throw语句。
2.当前方法不知道如何处理这种异常,则在定义方法的使用声明抛出该异常。该异常由上一级调用者处理。

throws ExceptionClass1,ExceptionClass2...

3.程序自行抛出异常

throw ExceptionInstance;

如果throw语句抛出的异常是Checked异常对象,则该语句必须位于try块里,显示捕获该异常;或者放在一个带throws声明抛出的方法中,交由方法调用者处理。
如果throw语句抛出的异常是Rutime异常,可以完全不理会该异常。

posted @ 2017-06-06 15:06  YC_chen  阅读(157)  评论(0编辑  收藏  举报