try catch finally throw throws

来源:互联网 发布:数据库关系模型示例 编辑:程序博客网 时间:2024/04/25 16:18

try语句

try语句块中可能会抛出异常

catch语句

catch语句的参数必须为throwable的子类,它指明了catch所处理的异常类型,而此异常是运行时在try语句块中生成并捕获的。大括号中可以处理此异常对象。

此外,catch语句可以有多个,分别处理不同的异常,Java运行时系统从上到下分别对每个catch语句处理的例外类型进行检测,直到找到类型相匹配的catch语句为止。这里,类型匹配指catch所处理的例外类型与生成的例外对象的类型完全一致或者是它的父类,因此,catch语句的排列顺序应该是从特殊到一般。

也可以用一个catch语句处理多个例外类型,这时它的例外类型参数应该是这多个例外类型的父类,程序设计中要根据具体的情况来选择catch语句的例外处理类型。

finally语句

try语句块中,当抛出一个异常时,其后的代码将不会被执行到(throw后面的代码将不会被执行),这时可以通过finally语句来制定一段代码,无论try所制定的语句块中是否抛出异常,也无论所抛出的异常是否与catch中的一致,finally中的代码一定会被执行。

throws语句   
throws总是出现在一个函数头中,用来标明该成员函数可能抛出的各种异常。对大多数Exception子类来说,Java 编译器会强迫你声明在一个成员函数中抛出的异常的类型。如果异常的类型是Error或 RuntimeException, 或它们的子类,这个规则不起作用, 因为这在程序的正常部分中是不期待出现的。 如果你想明确地抛出一个RuntimeException,你必须用throws语句来声明它的类型。  
   
throw语句   
throw总是出现在函数体中,用来抛出一个异常。程序会在throw语句后立即终止,它后面的语句执行不到,然后在包含它的所有try块中(可能在上层调用函数中)从里向外寻找含有与其匹配的catch子句的try块。

由于throw与throws容易混淆,下面对比二者区别:

第一 

throws 声明在方法头部

throw用于方法体内部

第二

throws后面是方法可能会抛出的异常类型

throw后面一定是某个异常类型的实例

第三

throws后面可以声明多个一场类型,用逗号隔开

第四

两种都是异常的消极处理方式,不好处理异常,异常的处理交给其调用者处理

第五

重要的一点,throw不可以单独使用,可以与try catch finally或者throws配套使用

而throws当然可以单独使用


小例子:

package test;public class TestException {public static void main(String args[]) {int a = -1;try {Age age = new Age();age.testAge(a);// 触发异常System.out.println("throw 之后的代码"); // 此行代码将不被执行,因为执行了throw} catch (MyException ex) {System.out.println(ex.toString());} finally { // 无论是否抛出异常,无论catch语句的异常类型是否与抛出的异常类型一致,finally都要执行System.out.println("finally 被执行");}}}class MyException extends Exception {String msg;MyException(int age) {msg = "error age !";}public String toString() {return msg;}}class Age {public void testAge(int n) throws MyException {if (n < 0 || n > 150) {MyException e = new MyException(n);throw e;// throw后面的代码将不被执行} else {System.out.println("allowed age!");}}}

参考文章:http://liqita.iteye.com/blog/1236362



0 0
原创粉丝点击