java异常的处理流程_Java异常处理机制

我们总是试图避免在软件程序中错误的发生,但是百分之百没有错误的程序是不存在的。无论怎样,如果我们能适当的处理错误,将会极大的改善程序的可读性、可靠性以及可维护性。Java编程语言使用异常来处理错误。这章主要讲述在什么时候和怎样使用异常来处理错误

58467e63ef89d0c7f52e823a317d7db4.png

异常处理程序的基本形式

method() throws ExceptionType2,ExceptionType3,……{

……

try {

……//程序块

}

catch (ExceptionType1 e) {

……// 对ExceptionType1的处理

}

catch (ExceptionType2 e) {

……// 对ExceptionType2的处理,处理了一部分,

throw(e); //再抛出这个“异常”给上层的调用者

}

……

finally {……//总是要执行的语句

}

}

异常对象

每个异常都是一个对象,它是Throwable类或

其它子类的实例.当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。

Throwable类有两个标准子类:

错误类:java.lang.Error

错误Error类一般是指虚拟机相关的问题,

异常类:java.lang.Exception

异常Exception类则是指一些可以被捕获且可能恢复的异常情况,如数组下标越界

Java异常类的继承关系

fbc1048e45ef9477e94b1a3014eeb9ce.png

异常实例

设定一个名称为isLegal的变量来检查数据是否合法,如果数据大于0时,返回合法值,否则视为不合法,抛出“异常”。

int isLegal(int dt) throws LowZeroException  {  //这种定义本文中均称为方法与“异常”通过throws建立了关联

if(dt>=0){

return data;

}

else

throw new LowZeroException();

} /*自已写的异常类,继承自Exception*/

class LowZeroException extends Exception

{

public LowZeroException(){

super();

}

异常的类别

在实际的程序开发中,异常无处不在,并且种类繁

多。区分什么情况下会出现什么样的异常是十分必

要的。

两个不同的角度来区分异常的种类:

异常发生的原因以

编译时对异常的检查

无论是Java的API中定义的诸多异常类还是我们自己定义的异常类(自定义异常在下面本章后面有详细的说明),根据编译器对异常的检查情况,又可以分为可检测异常和不可检测异常两种

常见的可检测异常有:

ClassNotFoundException;//没有找到指定类的定义

IOException;//指示产生某种输入/输出异常。

FileNotFoundException;//文件没有找到异常。

ArithmeticException //没有找到链接地址异常

捕获异常

Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally

和所有的捕获异常程序一样,第一步是用try关键字

选定监控异常的代码范围,然后在这段程序之后使用

catch关键字捕获异常,每个try代码块可以使用多个

catch代码块来对应,而catch语句需要指名它所捕获

的异常的类型名。

抛出异常

若在try块中抛出的异常没有能够捕获它的catch块,或捕获这个异常但不想立即处理,则Java将退出这个方法,并将其返回到上一级处理,如此不断地递归向上直到最外一级。同时,在方法的声明中要指定方法中可能产生的异常,使这个方法的调用者准备好处理这种异常的代码,这种类型的异常在此方法的调用者中得到了处理。调用者可能自己处理这种异常,也可能将这个异常放给它的调用者。异常就这样逐级上溯,直到找到处理它的代码为止。如果没有任何代码来捕获并处理这个异常,Java将结束这个程序的执行

Java可能会抛出异常的情况包括:调用的方法抛出了异常、检测到了错误并使用throw语句抛出异常、程序代码有错误,从而导致异常,比如数组越界错误、Java运行时刻系统产生内部错误。当前两种异常发生时,应该告诉使用这个方法的人,此方法强迫Java抛出异常。因为任何抛出异常的方法都是导致程序死亡的陷阱,如果没有任何代码来处理方法抛出的异常,就会导致程序结束

创建自定义异常

现实世界是非常复杂的,常常会有一些特殊的约束要求。例如我们制作一个统计河堤水位的软件,水位过高的时候,对程序本身只是一个较大的数字而已,并不会引发Java类库中的异常;但对于现实中的情况,水位过高就是一个致命的异常。这种情况下,Java类库中的异常处理类已经不能满足要求,我们需要抛出一个新的异常来提示过高的水位:一个自己定义的异常

创建自己的异常类非常的简单,可以用下面的声明语言来定义:

class 自定义异常名 xtends Exception{…}

这里的extends Exception就是我们定义的这个异常类是从java类库中的Exception这个类派生的,

也就是说,我们自定义的异常类可以拥有Exception,这个类的全部的内容,另外,还可以再写我

们需要的内容在里面

假如我们需要抛出一个提示水位过高的异常,我们

可以写一个像下面这样的异常类

class MyException extends Exception

{

private int i;

MyException(int a){ i = a; }

public String toString() {

return “水位过高”;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值