异常概述

异常:就是程序出现了不正常的情况,程序在执行过程中,出现的非正常的情况,最终回导致JVM的非正常停止。
注意:语法作物不再异常体系中

异常体系

异常体系.png
Error:严重问题,通过代码无法处理
比如:内存溢出
Exception:称为异常类,它表示程序本身可以处理的问题

  • RuntimeException及其子类:运行时异常。(空指针异常,数组索引越界异常)
  • 除RuntimeException之外所有的异常:编译期必须处理的,否则程序不能通过编译(日期格式化异常)

运行时异常和编译时异常

编译时异常和运行时异常.png

JVM的默认处理方案

如果程序出了问题,我们没有做任何处理,最终JVM会做出默认的处理

  • 把异常的名称,异常原因及异常出现的位置等信息输出在了控制台
  • 程序停止执行

    异常处理方式——throws

    格式:throws 异常类名;
    注意:这个格式时写在方法的定义处,表示声明一个异常

  • 告诉调用者,你调用我,有可能会出现这样的异常

  • 如果方法中没有出现异常,那么正常运行
  • 如果方法中出现了异常,那么将这个异常交给了调用者处理。

编译时异常因为在编译时就会检查,所以必须要写在方法后面进行声明
运行时异常因为在运行时才会发生,所以在方法后面可以不写

抛出异常对象——throw

格式:throw new 异常();
注意:这个格式是在方法内的,表示当前代码手动抛出了一个异常,下面的代码不用再执行了。
throws

  • 用在方法声明后面,跟的是异常类名
  • 表示声明异常,调用该方法有可能会出现这样的异常

throw

  • 用在方法体内,跟的是异常对象名
  • 表示手动抛出异常对象,由方法体内的语句处理

    抛出处理异常的意义

  1. 在方法中,当传递的参数有误,没有继续运行下去的意义了,则采取抛出处理,表示让该方法结束运行。
  2. 告诉调用者方法中出现了问题。

    异常处理方式——try…catch…

    格式: ```java try{ 可能出现异常的代码; }catch(异常类名 变量名){ 异常的处理代码; }
  1. 好处:可以让程序继续往下执行。<br />快捷键:option + command + t,快速创建try...catch...语句
  2. <a name="giPOs"></a>
  3. ## try...catch...常见问题
  4. 1.如果try中没有遇到问题,怎么执行?<br />答:会把try中所有的代码全部执行完毕,不会执行catch里面的代码<br />2.如果try中遇到了问题,那么try下面的代码还会执行么?<br />答:那么直接跳转到对应的catch语句中,try下面的代码就不会执行了,当catch里面语句全部执行完毕,表示整个体系全部执行完毕,继续执行下面的代码。<br />3.如果出现的问题没有被捕获,那么程序如何运行?<br />答:那么try...catch...就相当于没有写,那么也就是自己没有处理,默认会交代虚拟机处理。<br />4.同时有可能出现多个异常怎么处理?<br />答:出现多个异常,那么就写多个catch就可以了。<br />注意点:如果多个异常之间存在父子关系,那么父类一定要写在下面。
  5. <a name="LSoDR"></a>
  6. ## Throwable的成员方法
  7. | **方法名** | **说明** |
  8. | --- | --- |
  9. | `public String getMessage()` | 返回此throwable的详细消息字符串 |
  10. | `public String toString()` | 返回此可抛出的简短描述 |
  11. | `public void printStackTrace()` | 把异常的错误信息输出在控制台 |
  12. <a name="i9e9t"></a>
  13. ## 自定义异常
  14. ```java
  15. class 自定义异常类名 extends RunTimeException{
  16. 无参构造方法;
  17. 带参构造方法;
  18. }

目的:为了见名知意,所以自定义异常类名要描述该异常。