首页 > Linux操作系统 > Linux操作系统 > 第八章异常喝断言(3)
4.try、catch、finally块的关系
(1) try块不能单独存在,后面必须跟catch块或者finally块
(2) 三者之间的组合为:try—catch 、try—catch—finally 、 try—finally 这几种是合法的
(3) 一个try块可以有多个catch块,从上到下多个catch块的范围为从小到大
5.throw语句
throw语句用来从代码中主动抛出异常。throw的操作数是任一种异常类对象,主要用于后面介绍的产生自定义异常的对象。
下面是throw关键字的一个语法示例:
try {
int i = 5/0;
} catch (ArithmeticException i) {
throw new Exception("Can not be divided by zero!");
}
6.throws语句
throws用来在方法定义时声明异常。
Java中对异常的处理有两种方法,一个就是try-catch,然后自己处理;一个就是不做处理,向外throws,由别人去处理。
Java语言要求在方法定义中列出该方法抛出的异常:
public Class Example
{
public static void exceptionExample() throws ExampleException,LookupException
{
}
}
在上面的示例中,exceptionExample()声明包括throws关键字,其后列出了此方法可能抛出的异常列表。在此案例中列出的是ExampleException和LookupException。
比如前面那个例子写完整如下:
public class Test {
public static void main(String args[])throws Exception {
try {
int i = 5/0;
} catch (ArithmeticException i) {
throw new Exception("Can not be divided by zero!");
}
}
}
7.调用栈机制
如果方法中的一个语句抛出一个没有在相应的try/catch块中处理的异常,那么这个异常就被抛出到调用方法中。如果异常也没有在调用方法中被处理,它就被抛出到该方法的调用程序。这个过程要一直延续到异常被处理。如果异常到这时还没被处理,它便回到main(),而且,即使main()不处理它,那么,该异常就异常地中断程序。
考虑这样一种情况,在该情况中main()方法调用另一个方法(比如,first()),然后它调用另一个(比如,second())。如果在second()中发生异常,那么必须做一个检查来看看该异常是否有一个catch;如果没有,那么对调用栈(first())中的下一个方法进行检查,然后检查下一个(main())。如果这个异常在该调用栈上没有被最后一个方法处理,那么就会发生一个运行时错误,程序终止执行。
8.处理或声明规则
为了写出健壮的代码,Java编程语言要求,当一个方法在栈(即,它已经被调用)上发生Exception(它与Error或RuntimeException不同)时,那么,该方法必须决定如果出现问题该采取什么措施。
程序员可以做满足该要求的两件事:
第一, 通过将try{}catch(){}块纳入其代码中,在这里捕获给被命名为属于某个父类的异常,并调用方法处理它。即使catch块是空的,这也算是处理情况。
第二, 让被调用的方法表示它将不处理异常,而且该异常将被抛回到它所遇到的调用方法中。按如下所示通过用throws子句标记的该调用方法的声明来实现的:
public void troublesome() throws IOException
关键字throws之后是所有异常的列表,方法可以抛回到它的调用程序中。尽管这里只显示了一个异常,如果有成倍的可能的异常可以通过该方法被抛出,那么,可以使用逗号分开的列表。
是选择处理还是选择声明一个异常取决于是否给你自己或你的调用程序一个更合适的候选的办法来处理异常。
Java私塾跟我学系列——JAVA篇 网址:http://www.javass.cn 电话:010-68434236
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26660100/viewspace-715818/ ,如需转载,请注明出处,否则将追究法律责任。