JavaSE基础复习四:异常处理

本文最后更新于:2021年7月23日 晚上


JavaSE基础复习四:异常处理

异常:程序出现了不正常的情况

异常类的层级关系

  • Error:严重错误,不需要处理

  • Exception:称为异常类,他表示程序本身可以处理的问题

    • RuntimeException(运行时异常):在编译器不检查,在运行时才会出现,可以不显式处理,也可以和编译时异常一样处理

    • 非RuntimeException(编译时异常):编译器就可以发现并处理,不处理程序不能通过编译,因此必须处理

  • JVM的默认处理方案:

    • 先把异常的名称,异常的原因及异常出现的位置等信息输出在了控制台(e.printStackTrace())

    • 程序停止执行

异常处理

  • try…catch…处理

    • 格式:

      1
      2
      3
      4
      5
      6
      try{
      可能出现的异常代码
      }
      catch(异常类名 变量名) {
      异常处理代码
      }
  • 执行流程:程序从try里面的代码开始执行,出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统。当Java运行时系统接收到异常对象时,会到catch中去找匹配的异常类,找到后进行异常的处理,执行完毕后,程序还可以继续运行

  • 异常类的常用方法:

    方法名 作用
    public String getMessage() 异常的原因
    public String toString() 异常的内容
    public String getStackTrace() 异常的所有信息
    • throw处理

      • 当前无法处理异常是,可以将异常抛出去

      • 用法:在方法后fuction throws 异常名

      • 在调用出,依然需要用try…catch…进行处理

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        public funtion() throws IOException {

        }

        public static void main(String[] args) {
        try {
        function();
        } catch(IOException e) {
        e.printStackTrace();
        }
        }

自定义异常

  • 很多异常我们需要,但API并不提供,我们可以继承Exception类或者RuntimeException,实现自定义异常。你问为什么不继承其它的非RuntiomeException,因为编译时就必须要处理,继承了没有意义

  • 定义格式:

    1
    2
    3
    4
    5
    6
    public class 异常类名 extends Exception {
    无参构造()
    有参构造(String message){
    super(message); // 这个message就是输出的错误信息,Trowable带参构造需要传入
    }
    }
  • 使用方法:在方法中,某个条件下thorw new 异常类名(message)

throw和throws的区别

throw throws
用于方法体内,跟的是异常对象 用于方法声明后,跟的是异常类名
表示抛出异常,由方法体内catch内的语句处理 表示抛出异常,由方法调用者处理
执行throw一定抛出了某种异常 表示可能出现某种异常,如果出现就抛出,没有就不管