3

前言

  1. 概述:异常就是java程序在运行过程中出现的错误。
  2. 异常发生时如何处理,java提供了解决办法:异常处理机制。
  3. java中的异常可以是函数中的语句执行时引发的,也可以是程序员通过throw语句手动抛出。
  4. 只要在java程序中产生了异常,就会用一个对应类型的异常对象来封装异常,JRE会试图寻找异常处理程序来处理异常。
  5. JDK中内建类一些常见的异常类,我们也可以自定义异常。
  6. Throwable类是java异常类型的顶层父类,一个对象只有是Throwable类的直接或间接实例,他才是一个异常对象,才能被异常处理机制识别。

异常分类

  1. 检查性异常:

    (1)最具代表性的检查性异常是用户错误或问题引起的异常,这是程序员无法预测的。
    (2)例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单的忽略。
  2. 运行时异常:

    (1)运行时异常是可能被程序员避免的异常。
    (2)与检查性异常相反,运行时异常可以在编译时被忽略。
  3. 错误:

    (1)错误不是异常,而是脱离程序员控制的问题。
    (2)错误在代码中通常被忽略。
    (3)例如,当栈溢出时,一个错误就发生了,它们在编译时也是检查不到的。
  4. 异常分类图解:
    图片描述

Error和Exception类

  1. java标准库内建了一些通用的异常,这些类以Throwable为顶层父类。
  2. Throwable又派生出Error类和Exception类。
  3. Error类:

    (1)Error类以及他的子类的实例,代表了JVM本身的错误。
    (2)错误不能被程序员通过代码处理,Error很少出现。
    (3)因此,程序员应该关注Exception为父类的分支下的各种异常类
  4. Exception类:

    (1)Exception及他的子类,代表程序运行时发送的各种不期望发生的事件。
    (2)可以被java异常处理机制使用,是异常处理的核心。

异常处理

  1. 异常处理机制能让程序在发生异常时,按照代码预先设定的异常处理逻辑,针对性的处理异常,让程序尽最大可能的恢复正常并继续执行,且保持代码的清晰。
  2. java中,异常处理的任务就是将执行控制流从异常发生的地方转移到能够处理这种异常的地方去。
  3. 在编写代码处理异常时,对于检查异常,有两种处理方式:

    (1)使用try...catch...finally语句块处理
    (2)在函数签名中使用throws声明交给函数调用者caller去解决
  4. try...catch...finally语句块:

    (1)try块中放可能发生异常的代码;
    (2)如果执行完try并且不发生异常,则接着去执行finally块代码以及finally之后的代码;
    (3)如果执行try中代码发生异常,就会尝试匹配catch块;
    (4)每一个catch块用于处理一个异常;
    (5)异常匹配是按照catch块的顺序从上往下寻找的,只有第一个会匹配到的catch块会被执行。
    (6)try块中的局部变量和catch块中的局部变量,以及finally中的局部变量,它们之间不可以共享使用;
    (7)finally块不管异常是否发生,只要对应的try块执行了,它一定会执行。
    (8)finally块通常用来做资源释放操作,关闭文件或者关闭数据库等操作。
  5. throws/throw:

    (1)如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明。
    (2)throws 关键字放在方法签名的尾部。
    (3)throws仅仅是将函数中可能出现的异常向调用者声明,而自己并不处理异常。
    (4)采用这种异常处理的原因可能是:方法本身不知道如何处理这种异常,或者说让调用者处理更好,调用者需要为可能发生的异常负责。
    (5)也可以使用 throw 关键字手动抛出一个异常,无论它是新实例化的还是刚捕获到的。
    (6)throw语句的后面必须是一个异常对象。

参考链接

http://www.importnew.com/2661...


繁星落眼眶
626 声望54 粉丝