异常处理—错误抛出机制

错误抛出机制:

  把可能出现异常的代码写在try{}里,使用catch(){}设置一些异常陷阱来捕获异常。例如:

9aecdbf4dd8669418112366edb766c1f.png

134ad99a888a4c4155b9b420ed127642.png



没有异常处理时异常的抛出机制:

  为什么出现异常会在控制台上显示打印红色的异常呢?这是因为其实main方法外面还有一个try catchtry包围住main方法,catch捕捉异常,所以在main方法里没有写try catch来捕获出现的异常,这个异常就会往外抛到包围main方法的这个try catch,然后就会在控制台上打印出现的异常。

e0be4e5f1ef3d195d34a6853b813229c.png


异常抛出机制过程:

a00ccf709c066e7707c34364cc9ba2d6.png



异常家族:

  Thrwable是所有异常类的最高父类,它的两个子类Error(虚拟机报的异常)Exception(代码上报出的异常),只要是继承这两个类的都强制要写try catch不然就会直接报语法错误。Exception下还有一个RuntimeException子类(常见异常or不是很重要的异常),继承这个类的则不会要求写try catch,因为对开发熟练的工程师一般可以避免出现这种异常,不然所有异常都要求写try catch的话,这样写一段代码就要写一个try catch会显得烦赘。

64499a242f880925fa2a81e805e2365c.png



通用异常陷阱:

  异常对象里还有通用的捕获陷阱,一般有其他陷阱的情况下通用陷阱要写在最后面,写在前面的话全部异常都会进入这个陷阱了,开发中最好少写通用陷阱,因为发生错误了不知道具体是什么错误。

87e9a7ebc626ee9c596ef3d32b527459.png


try catch里代码执行流程:

da8ed0c33149a08049a7a81afbf3659a.png

  因为在第14行代码出现类型转换错误,而且没有相对应的异常捕获陷阱,这个异常就会往外抛,抛到main方法外的try catch里。因为这个异常没有被处理所以下面的代码一句都不会执行的,所以只会打印1 2然后打印异常。


  因为在第16行代码出现内存溢出错误,然后就进入相对应的异常捕获陷阱里,异常被处理了后面的代码就会继续执行,所以打印 1 2 3 4 7 8。这种情况要看虚拟机分配的内存,如果是分配的少于2G就只会打印1 2 3 7 8,如果分配的少于1G就只会打印 1 2 7 8

562e4e2856bb684dcffaaeba23562acd.png


   try catch可以进行嵌套使用,因为在第12行代码出现数组下标越界错误,而且没有相对应的异常捕获陷阱,这个异常就会往外抛,抛到main方法外的try catch里,被打印出来。因为这个异常没有被处理所以外层try catch下面的代码一句都不会执行的。 

39353e2309bf0c3e98cb2e1f346251be.png



  没有出现类型转换错误的原因是因为,s的值是null没有内存里面是空的,所以在转换的时候不明确s是什么类型,所以就会转换成功没有出现错误,一旦里面有值即便是””也会报错。

da9e56ee10a76eb7bc2f102e631314f2.png





本文转自 ZeroOne01 51CTO博客,原文链接:http://blog.51cto.com/zero01/1974350,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值