异常的捕获和处理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fighting123678/article/details/83926309

1、处理异常的基本结构

(1)finally中的代码是受保护的代码,不论是否有异常都一定会执行

(2)以前catch中只能处理一种类型的异常,但是从jdk7开始,每个catch可以捕获多种异常。

(3)catch中不要加空代码,一定有相应的异常处理代码,加空代码的话,程序是没有任何反应,不利于调试程序。


2、catch子句

(1)printStackTrace方法是,通过异常对象的方法,打印出相应的错误信息,便于调试,这个方法很重要。


3、finally子句


4、实例1

(1)为什么要把in定义到try上面呢?

  • in在try中初始化,因为FileInputStream可能会发生异常,所以new这行代码必须放在try里面,这样才能进行捕获异常,read也可能发生异常,所以放到try里面。
  • finally里可以访问in,因为in在try外面。所以说,可以通过in.close关闭输入流。

(2)finally中也可以用try、catch,以为close也可能抛出异常。

(3)在实际开发中,经常会看到,有try、catch,同时,在finally中还有try、catch。


5、实例2(异常跟踪栈)

(1)有一个类,调用了firstMethod方法,在firstMethod方法中调用了secondMethod方法,secondMethod方法中调用了thirdMethod方法,thirdMethod方法抛出异常,这个异常是自定义的RuntimeException异常,抛出异常之后,没有处理,就抛给调用的方法,也就是secondMethod方法,secondMethod方法也没有处理,就抛给调用的方法firstMethod方法,firstMethod方法没有处理,,就抛给main了,main也没有处理,就抛给虚拟机了,但是虚拟机也不会处理,就把异常列出了。

(2)异常报了四行错误,最上面的是错误的根,因为这一行出错,才导致别的出现错误,所以,一般对根的位置改动,其余的错误也就接着没了。

(3)异常会一直抛给调用方,知道最原始的函数,如果最原始的函数还没有处理的话,就会抛给虚拟机,然后报错。


6、父类异常不能写在子类异常的前面

(1)Exception是所有异常的父类,但是,父类异常不能写在子类异常前面,因为不安全

工作过程是,出现异常的话,首先回调第一个catch,看看catch能不能接受出现的异常,因为Exception是所有异常的根类,所以,所有异常都会被这个catch被捕获掉,后面catch就没有执行的机会了。

(2)一般是什么异常,能处理什么异常,就写什么异常,子类异常最好了。


7、方法处理异常的原则

(1)特殊情况,一个类的很多方法都抛出一种异常,而且处理方法都一样,这样不需要每个异常都处理,可以每个方法都抛出,然后统一处理,因为,为了避免代码重复。

猜你喜欢

转载自blog.csdn.net/fighting123678/article/details/83926309