Java异常处理

常见运行的异常
NullPointerException 说明空指针异常
ArraylndexOutOfBoundsException  数组越界异常
ClassCastException 类型转换异常
NumberFormatException 数字格式化异常
ArithmeticException 算术异常


47dfe67dbcf44900b3259df57b76c134.jpg


2ffea4a8d4254807a1c3d4294f779d4c.png 

 5b9e1ac2d5dd463f8b5ca048995318df.png

 

  • 正常请求

程序没有问题,从头执行到尾

  • 出现异常并处理(与catch提供的异常处理匹配有相匹配的处理方式)

try 执行可能出现异常的代码,这时发现代码异常,不再执行try里面代码发生异常后的代码,会直接进行catch 捕捉,并处理(执行catch里面的代码),然后继续执行try catch之后的代码。

  • 异常不匹配(catch捕获的异常与catch提供解决的异常不匹配)

try进行可能出现异常的代码,此时发生代码异常,立即catch进行捕获,发现与catch提供的异常处理不匹配,此时代码运行中断,之后的所有操作不再执行(try里面发生异常之后的代码和catch里面的代码以及try catch以后的代码都不进行运行)。


454fcc5d0dd14a0bba0de5e162cc08a9.png

 理解:

try catch 跟之前一样,此处增加finally ,只需要理解它就行。

finally怎么理解它是否发生异常都会执行呢?作用是什么呢?

  1. 如果没有发生异常,意味着catch不会捕获且不会执行catch里面的代码。但是会执行finally里面的代码,再执行try catch finally之后的代码。
  2. 如果发生异常并且被catch捕获,意味着try发生异常之后的代码不执行,但是catch捕获异常后,catch里面的代码以及finally里面的代码,还有try catch finally之后的代码都会执行。
  3. 如果发生异常并且没有catch捕获,不仅不执行try发生异常后的代码,而且catch代码也不执行。但是finally里面的代码执行。             注意:try catch finally 之后的代码也不执行。
  4. finally的作用就是释放资源。

小总结:

注意:catch捕获就是要进行catch里面的代码,反之不进行

try异常无finally,有catch且捕获,程序行;

try异常有finally,有catch且捕获,finally、程序行。

try异常有finally,有catch没捕获,finally行。

try正常有finally,有catch不管他,finally、程序行。

 

其实就一句话,有finally加finally程序代码,有捕获就执行除过try异常后的代码,都执行。没捕获直接拜拜。


2d0675ef391e426ba99c6480764b931e.png

 跟switch() case 函数 很像

try发现异常依次catch捕获,只要有一个捕获到了,后面的就不进行了,以后情况就跟try catch情况没有区别了。

注意:上层catch不能比下层catch处理异常的范围大,要不要下面有什么用呢?你说呢?

0154c38b96c0451d9b53d13cb4549d0a.png

 try发现异常了,由于finally只执行但是不会处理异常,这时候谁调用try finally这个函数(try finally在这个函数里面),谁就来处理这个异常(当调用函数没有抛出异常的情况下,如果抛出它想处理就处理,运用throws,后面会讲到)。但要记住,最上层必须处理,否则中断。

8c3431ff3bbd4951bc64800a4d94f58a.png

一个函数不管又没有异常,它都声明异常(声明多个也没事),谁调用它就处理它的异常,除非调用的函数也同样做此操作,声明异常。一般不会这样,这有什么意义呢?处理操作就是try catch finally,有无finally都可以,把调用函数放try里面让catch捕获异常并处理。


fe06c7af142d4ee5b7d054ee804b1a23.png

在函数体里面,用throw抛出异常 然后处理


e2904497deee4e27af700b96014ff83b.png自己定一个异常类,具体方法就是,catch捕获的异常类是你自定义的,你自己怎么定义呢?你用自己定义的异常类继承一个父类,父类是jvm里面自带的异常即可。 

注意:自己定义时,一定要有默认构造方法,跟String message参数构造方法


14ec750726e949b6807e6964d92ba0e8.png 自己定义的异常类继承的父类的异常,重写方式跟之前学的重写方式并无两样,如上图,但是重写的函数不能比父类可以解决的异常的问题更广泛。除过父类是RuntimeException.

注意:Exception是所有异常类的父类


11c57dc0faca4c03a90b8fc47f93a61e.png 

 

 

  • 20
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值