您的位置:首页 > 编程语言 > Java开发

JAVA Exception Handing

2016-04-03 14:35 417 查看
[align=center]JAVA Exception Handing[/align]
当一个error出现在一个方法里面的时候,这个方法会创建一个object,然后把它交给runtime system。这个object包括了一些关于这个错误的信息,错误的类型以及程序的状态。于是我们就可以得到抛出异常的概念就是创建一个 exception object 并把它交给runtime
system。
[align=left]下面的这一段来自另一个博客:http://blog.csdn.net/hamber_bao/article/details/6503867[/align]
[align=left]JAVA中的异常处理是通过五个关键字来实现的:try catch finally throw throws.[/align]
[align=left]关键字介绍:[/align]

try:当某段代码执行过程中,可能会发生异常的话,我们应该把这段代码放进try语句块中

catch:在catch语句块中捕获异常。catch语句块的参数类似于方法的声明,包含一个异常类型和异常对象。异常类型一般是

java.lang.Exception类或者它的子类。

finally:无论是否产生异常,finally所指定的代码都要执行。通常在finally语句块中可以进行资源清理工作,如关闭打开的文件等。

throw:总是出现在方法体中,用来抛出一个异常。

throws:总是出现在方法的声明中,用来表明该方法可能抛出的各种各样的异常.

try-catch执行流程

try-catch程序块中的执行流程以及执行的结果是比较简单的,首先执行的是try语句块中的语句。这时可能会有以下3种情况:

(1)如果try语句块中的所有语句都正常执行完毕,那么catch块中的所有语句都会被忽略。

(2)如果try语句块中在执行过程中碰到异常,并且这个异常与catch中声明的异常类型相匹配。那么在try块中剩余的代码都将被

忽略。而相应的catch块都将被执行。通过异常对象的printStackTrace()方法可以得到异常的堆栈信息。

(3)如果try语句块在执行过程中碰到异常,而抛出的异常在catch块里面没有被声明,那么方法立刻退出

try-catch-finally执行流程:

在try-catch语句块后加入finally块,可以确保无论是否发生异常,finally块中的代码总能被执行。

try-catch-finally块的执行流程大致分为两种情况:

(1)如果try块中所有语句正常执行完毕。那么finally块就会被执行。

(2)如果try块中所有语句碰到了异常,那么finally块中的语句也会被执行。



多重catch块:

一段代码可能会引发多种类型的异常。这时,我们可以在一个try语句块后紧跟多个catch语句块,分别处理不同的异常。

这里,需要注意的是:多个catch块中处理的异常类型必须是从特殊到一般,最后一个一般是Exception类

运行时,系统从上到下分别对每个catch语句块处理的异常类型进行检测,并执行第一个与异常类型匹配的catch语句。执行了

一个catch语句后,其后的catch语句将被忽略。匹配是指catch所处理的异常类型与所生成的异常类型完全一致或是它的超类。

如果程序产生的异常类型与catch处理的异常都不匹配的话,则这个异常将由JVM捕获并且处理,此时与不使用异常处理是

一致的。

Exception类的继承关系:





JAVA中Error和Exception的区别

Error类和Exception类的父类都是throwable类,他们的区别是:
Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。
Exception类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。
Exception类又分为运行时异常(Runtime Exception)和受检查的异常(Checked Exception ),运行时异常;ArithmaticException,IllegalArgumentException,编译能通过,但是一运行就终止了,程序不会处理运行时异常,出现这类异常,程序会终止。而受检查的异常,要么用try。。。catch捕获,要么用throws字句声明抛出,交给它的父类处理,否则编译不会通过。

常见的异常;
RuntimeException是unchecked Exception(就是程序员可以不更正这些异常),包括
ArrayIndexOutOfBoundsException 数组下标越界异常,
ArithmaticException 算数异常 如除数为零
NullPointerException 空指针异常:一般就是在null对象上调用了方法。
IllegalArgumentException 不合法参数异常
Negative ArraySize Exception 创建一个大小为负数的数组错误异常
ClassCastException 类型强制转换异常
ArrayStoreException 向数组中存放与声明类型不兼容对象异常
NumberFormatException 字符串转换为数字类型时抛出的异常。
SecurityException 安全异常
UnsupportedOperationException 不支持的操作异常
java还可以使用自己定义的异常,并采用自己的方法来处理异常。
<span style="font-size:18px;">package cn.edu.com.hbut;

public class OutOfScoreRangeException extends Exception{
public OutOfScoreRangeException(String msg, int score){
super(msg);
this.score = score;
}

public int getScore(){
return this.score;
}

private int score;
}
</span>


<span style="font-size:14px;">package cn.edu.com.hbut;

public class Score {
public Score(int s) throws OutOfScoreRangeException{
if(s <= 100 && s >= 0){
this.score = s;
} else {
throw new OutOfScoreRangeException("Out of score range exception ",s);
}

}
private int score;
}
</span>


package cn.edu.com.hbut;

public class TestSocre {
public static void main(String [] args){
try{
Score s1 = new Score(98);
Score s2 = new Score(100);
System.out.print(s1);
System.out.print(s2);
} catch(OutOfScoreRangeException e){
System.out.println(e.getMessage() + e.getScore());
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: