Java异常总结

一、    异常处理的任务


将控制权从错误产生的地方转移给能够处理这种情况的错误处理。所有的异常都有一个共同的祖先 Throwable(可抛出)。 

在 Java 应用程序中异常处理机制为:抛出异常,捕捉异常。 


二、    非受查异常


派生于Error类或者RuntimeException类的所有异常称为非受查异常,

RuntimeException的异常包括以下情况(自动抛出异常):

1、错误的类型转换(NumberFormatException

2、数组访问越界  (ArrayIndexOutOfBoundsException

3、访问null指针(java.lang.NullPointerException


三、其他异常称为受查异常。


编译器将检查是否为所有的受查异常提供了异常处理。

总之,一个方法必须声明所有可能抛出的受查异常,而非受查异常要么不可控制(Error),要么就应该避免发生(RuntimeException)。如果方法没有声明所有可能发生的受查异常,编译器可能会发出一个错误消息。


1、 什么时候需要在方法中用throws子句声明异常,什么异常必须使用throws子句声明,以下4种情况应该抛出异常:


A、调用一个抛出受查异常的方法

eg:public FileInputStream(String name)throws FileNotFoundException

B、程序运行过程中发现错误,并且利用throw语句抛出一个受查异常

C、程序出现错误,例如非受查异常a[-1] = 0会抛出:数组访问越界  (ArrayIndexOutOfBoundsException

D、Java虚拟机和运行时库出现的内部错误


出现前两种情况时,必须告诉方法调用者有可能抛出异常(如果处理器没有捕获这个异常,当前执行的线程就会结束)


2、 抛出异常

throws new EOFException();

或者

EOFException e = new EOFException();

throw e;

抛出异常步骤:

A、 找到一个已经存在的异常类(自定义一个派生于Exception或Exception子类的类[一般含有一个无参构造,一个有参构造])

B、 创建这个类的一个对象

C、 将对象抛出


注意:编译器严格执行throws说明符,如果调用了一个抛出受查异常的方法,就必须对它进行处理,或者继续传递。(通常,应该捕获那些知道如何处理的异常,而将那些不知道怎样处理的异常继续进行传递),如果想要传递一个异常,就必须在方法的首部添加一个throws的说明符,以便告知调用者这个方法可能或抛出异常。


3、 Throws和throw的异同


A、throws是方法可能抛出异常的声明,只是一种异常出现的可能性,并不一定会发生这些异常,throw则是抛出了异常,执行throw(动作)则一定抛出了某种异常

B、throws出现在方法函数头,而throw出现在函数体

C、二者均不会由函数处理异常,真正的处理异常由函数的上层调用处理


4、 捕获异常



注意:

A、Try语句块不可以独立存在,必须与catch或者finally块同存

B、catch块跟在try语句后面,它可以是一个或多个

C、catch块有一个参数,该参数是某种异常类的对象

D、多重catch语句中,异常类型必须子类在前父类在后

可以加一个catch(Exception)来处理可能会被遗漏的异常

E、尽量添加finally语句块去释放占用的资源


5、 异常链





此时,运行期异常是由SBException引起的 ,可以根据行号去追溯异常

实现异常链的方法二


 


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值