1.JVM默认的处理方式

a.把异常的名称,异常原因及异常出现的位置等信息输出在了控制台

运行结果如下:

b.程序停止执行,异常下面的代码不会再执行了

2.try…catch捕获异常(自己处理,捕获异常)

a.格式:

 b.目的:当代码出现异常时,可以让程序继续执行下去。

c.示例如下:

            

 由于产生异常,此时代码无法继续执行

如何改变呢?

使用try…catch处理异常

           

 运行结果如下所示:

 仔细分析红色箭头的内容

System.out.println(arr[10]);   

1.此处出现了异常,程序就会在这里创建一个ArrayIndexOut0fBoundsException对象
2.new ArrayIndexOutOfBoundsException ();
3.拿着这个对象到 catch 的小括号中对比,看括号中的变量是否可以接收这个对象
4.如果能被接收,就表示该异常就被捕获(抓住),执行 catch 里面对应的代码

5.当 catch 里面所有的代码执行完毕,继续执行 try … catch 体系下面的其他代码

3.捕获异常的灵魂四问:

灵魂一问:如果 try 中没有遇到问题,怎么执行?

答:会把try里面所有的代码全部执行完毕,不会执行catch里面的代码

                注意只有当出现异常才会执行catch里面的代码

灵魂二问:如果 try 中可能会遇到多个问题,怎么执行?

答:会写多个catch与之对应。

        细节:如果我们要捕获多个异常,这些异常中如果存在父子关系的话,那么父类一定要写在下面。

拓展:以上是JDK7以前的处理方式。

在JDK7以后我们可以同时捕获多个异常,中间用 “ | ” 进行隔开,

表示如果出现A异常或者B异常的话,采取同一种处理方案。


灵魂三问:如果 try 中遇到的问题没有被捕获,怎么执行?

相当于try…catch的代码白写了,最终还是会交给虚拟进行处理

灵魂四问:如果 try 中遇到了问题,那么 try 下面的其他代码还会执行吗?

答:不会执行,下面的代码就不执行,直接跳转到对相应的catch 当中,执行catch里面的语句体

但是如果没有对应的catch与之匹配,那么还是会交给虚拟机处理。


版权声明:本文为WZY22502701原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/WZY22502701/article/details/128525828