一、异常

image.png
Throwable是所有错误和异常的超类
--Error--严重问题,不需要处理
--Exception--RuntimeException 在编译期不检查的,出现问题再回来修改
--Exception--非RuntimeException 在编译期就必须处理,不然编译不通过。

二、JVM的默认处理方案

image.png

默认处理方案会在程序出现异常的地方直接结束。

三、异常处理之try-catch

两种异常处理方案:try--catch;throws;

image.png

3.1 try catch

格式:

try{
需要处理异常的语句//如果这里出现了xx异常,就会在堆中new xx();如果与catch中的异常类匹配则执行下面的语句
}catch(异常类 对象){
匹配这个异常类后,会执行的语句
}

image.png
输出了catch后面的执行语句,且执行了“结束”
image.png

四、Throwable类

Throwable是所有异常的祖宗类,因此所有异常都可以调用他里面的方法。
image.png

  • e.getMessage()输出了出现异常的原因

image.png

  • e.toString输出了异常原因+异常类名
    image.png
  • e.printStackTrace()输出了异常原因+异常类名+异常出现的位置

五、运行时异常和编译时异常的区别

image.png

运行时异常:非受检异常,编译时不会报错,是runtimeException的子类
编译时异常:受检异常,必须处理,不然编译不成功,是Exception的子类,除了runtimeException类及其子类的所有异常

运行时异常:

image.png

编译时异常:
parseException

image.png
解决方案:
image.png
红线是说他这里有可能出错。

六、异常处理之throws

image.png

例:
image.png

throws只是抛出异常,并且找到异常就结束程序。不会继续往后执行。
要想继续执行还是需要try catch。

意思就是在方法定义时抛出后,谁调用这个方法,谁就用try catch异常。

image.png

七、自定义异常

image.png
注意继承自Exception,是编译时异常。
如果继承自runtimeException,是运行时异常。
定义一个无参构造和一个有参构造,且有参构造里继承父类
image.png

image.png
throw xxException//这里用的是throw 不是throws
表示当分数大于100或小于0,就必须抛出这个异常,(must throw)
然后由于此自定义异常是编译时异常,那么的方法名括号后需要throws xxException
使用这个带自定义异常的方法
image.png
控制台的输出:异常名称+异常位置(没有异常原因
image.png

异常原因需要在throw new xxException("异常原因");这里加入

image.png
控制台的输出:异常原因+异常名称+异常位置
image.png

八、throw和throws的区别

最主要的就是

throw 在方法体里面,一定会抛出异常
throws 在方法名后面,只有出现异常了才会抛出异常。

image.png

  • ScoreException 定义异常,编译/运行时异常都一样
    image.png
  • Teacher 定义方法带自定义异常

    编译时异常需要在方法名括号后面throws xxException
    运行时异常不需要
    两者写异常原因都是在throw new xxException("异常原因")

    image.png

  • Test 测试方法

    编译时异常需要在main方法括号后 throws xxException
    且使用带编译时异常的方法需要try catch
    运行时异常均不需要

    image.png


MeeWoW
18 声望1 粉丝

加油