Java 异常处理


基本概念

  • 所有的异常父类都是Throwable,Throwable将异常分为两大类:Error 和 Exception。 其中Error一般是由系统内部错误或资源耗尽等引起的错误。在程序中我们只需要考虑Exception异常既可。
  • 将Error和RuntimeExceptionl类的所有异常称为非受查异常(unchecked),其他的称为受查异常(checked)在编程程序期间编译器会自动提示你会抛出异常。
  • 一个方法一般将异常抛出(throws)给调用者进行捕获处理, 早抛出,晚捕获。
  • finally 用于处理一些资源释放操作,当finally里面出现return时,它会覆盖之前的return结果!!!

异常处理建议

  • 捕获异常时,如果异常存在父子关系,如需对各个异常进行特殊捕获处理需要将子类放在父类之前。可以一个catch里面捕获多个异常,代码如下:
    catch ( FileNotFoundException | UnknownHostException e ) { . . . }
    
  • 对捕获异常进行设置为新的异常再抛出,调用在catch新抛出的异常时使用e.getCause()获取原始的异常信息:
    try {
      ....
    } catch (NullPointerException e) {
      Throwable se = new CustxxxxException("xxxx不能为空!");
      se.initCause(e);
      throw se;
    }
    // 调用者
    se.getCause();