异常、JVM的默认处理方案、trycatch/throws、Throwable类、运行时异常-编译时异常、自定义异常

一、异常

异常、JVM的默认处理方案、trycatch/throws、Throwable类、运行时异常-编译时异常、自定义异常_第1张图片
Throwable是所有错误和异常的超类
--Error--严重问题,不需要处理
--Exception--RuntimeException 在编译期不检查的,出现问题再回来修改
--Exception--非RuntimeException 在编译期就必须处理,不然编译不通过。

二、JVM的默认处理方案

异常、JVM的默认处理方案、trycatch/throws、Throwable类、运行时异常-编译时异常、自定义异常_第2张图片

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

三、异常处理之try-catch

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

异常、JVM的默认处理方案、trycatch/throws、Throwable类、运行时异常-编译时异常、自定义异常_第3张图片

3.1 try catch

格式:

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

异常、JVM的默认处理方案、trycatch/throws、Throwable类、运行时异常-编译时异常、自定义异常_第4张图片
输出了catch后面的执行语句,且执行了“结束”
异常、JVM的默认处理方案、trycatch/throws、Throwable类、运行时异常-编译时异常、自定义异常_第5张图片

四、Throwable类

Throwable是所有异常的祖宗类,因此所有异常都可以调用他里面的方法。
异常、JVM的默认处理方案、trycatch/throws、Throwable类、运行时异常-编译时异常、自定义异常_第6张图片

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

异常、JVM的默认处理方案、trycatch/throws、Throwable类、运行时异常-编译时异常、自定义异常_第7张图片

  • e.toString输出了异常原因+异常类名

异常、JVM的默认处理方案、trycatch/throws、Throwable类、运行时异常-编译时异常、自定义异常_第8张图片

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

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

异常、JVM的默认处理方案、trycatch/throws、Throwable类、运行时异常-编译时异常、自定义异常_第9张图片

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

运行时异常:

异常、JVM的默认处理方案、trycatch/throws、Throwable类、运行时异常-编译时异常、自定义异常_第10张图片

编译时异常:
parseException

异常、JVM的默认处理方案、trycatch/throws、Throwable类、运行时异常-编译时异常、自定义异常_第11张图片
解决方案:
异常、JVM的默认处理方案、trycatch/throws、Throwable类、运行时异常-编译时异常、自定义异常_第12张图片
红线是说他这里有可能出错。

六、异常处理之throws

异常、JVM的默认处理方案、trycatch/throws、Throwable类、运行时异常-编译时异常、自定义异常_第13张图片

例:
异常、JVM的默认处理方案、trycatch/throws、Throwable类、运行时异常-编译时异常、自定义异常_第14张图片

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

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

异常、JVM的默认处理方案、trycatch/throws、Throwable类、运行时异常-编译时异常、自定义异常_第15张图片

七、自定义异常

异常、JVM的默认处理方案、trycatch/throws、Throwable类、运行时异常-编译时异常、自定义异常_第16张图片
注意继承自Exception,是编译时异常。
异常、JVM的默认处理方案、trycatch/throws、Throwable类、运行时异常-编译时异常、自定义异常_第17张图片
定义一个无参构造和一个有参构造,且有参构造里继承父类
异常、JVM的默认处理方案、trycatch/throws、Throwable类、运行时异常-编译时异常、自定义异常_第18张图片
throw xxException//这里用的是throw 不是throws
然后在用了这个自定义异常的方法名后throws xxException
使用这个带自定义异常的方法
异常、JVM的默认处理方案、trycatch/throws、Throwable类、运行时异常-编译时异常、自定义异常_第19张图片
控制台的输出:异常名称+异常位置(没有异常原因
image.png

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

异常、JVM的默认处理方案、trycatch/throws、Throwable类、运行时异常-编译时异常、自定义异常_第20张图片
控制台的输出:异常原因+异常名称+异常位置
image.png

八、throw和throws的区别

最主要的就是

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

异常、JVM的默认处理方案、trycatch/throws、Throwable类、运行时异常-编译时异常、自定义异常_第21张图片

你可能感兴趣的:(java)