异常处理―错误抛出机制

时间:2021-11-28 00:45:29

错误抛出机制:

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

异常处理―错误抛出机制

异常处理―错误抛出机制



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

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

异常处理―错误抛出机制


异常抛出机制过程:

异常处理―错误抛出机制



异常家族:

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

异常处理―错误抛出机制



通用异常陷阱:

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

异常处理―错误抛出机制


try catch里代码执行流程:

异常处理―错误抛出机制

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


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

异常处理―错误抛出机制


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

异常处理―错误抛出机制



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

异常处理―错误抛出机制


本文出自 “zero” 博客,请务必保留此出处http://zero01.blog.51cto.com/12831981/1974350