抛出异常和捕获异常的区别

来源:互联网 发布:美国财经数据公布网 编辑:程序博客网 时间:2024/05/17 03:38

 

抛出异常:如果程序中出现了异常,没有办法将具体的异常打印出来,不做任何处理

 

捕获异常:如果程序出现了异常,就能够详细的打印是什么原因导致了异常并且能够做出相应的处理,能够显示详细的Log

 

如果代码是抛出异常的方式,在运行时出现异常,并且打印的Log不明显,可以改用try{}catch方式来捕获异常,打印出详细的信息

 

throws语句   

throws总是出现在一个函数头中,用来标明该成员函数可能抛出的各种异常。对大多数Exception子类来说,Java 编译器会强迫你声明在一个成员函数中抛出的异常的类型。如果异常的类型是Error或 RuntimeException, 或它们的子类,这个规则不起作用, 因为这在程序的正常部分中是不期待出现的。 如果你想明确地抛出一个RuntimeException,你必须用throws语句来声明它的类型。  

 

throw语句   

throw总是出现在函数体中,用来抛出一个异常。程序会在throw语句后立即终止,它后面的语句执行不到,然后在包含它的所有try块中(可能在上层调用函数中)从里向外寻找含有与其匹配的catch子句的try块。

public class MyException extends Exception {String msg;MyException(int age) {msg = "age can not be positive!";}public String toString() {return msg;}}

 

package com.hb.exception;public class Age {public void intage(int n) throws MyException {//if (n < 0 || n > 120) {MyException e = new MyException(n);throw e; // 是一个转向语句,抛出对象实例,停止执行后面的代码}if (n >= 0) {System.out.print("合理的年龄!");}}public static void main(String args[]) {int a = -5;try { // try catch 必需有Age age = new Age();age.intage(a);// 触发异常System.out.print("抛出异常后的代码");// 这段代码是不会被执行的,程序已经被转向} catch (MyException ex) {System.out.print(ex.toString());} finally {// 无论抛不抛异常,无论catch语句的异常类型是否与所抛出的例外的类型一致,finally所指定的代码都要被执行,它提供了统一的出口。System.out.print("进入finally! ");}}}

 

打印结果:

age can not be positive!进入finally! 

 

throw 是语句抛出一个异常;throws 是方法抛出一个异常;

throw语法:throw <异常对象>

在方法声明中,添加throws子句表示该方法将抛出异常。

throws语法:[<修饰符>]<返回值类型><方法名>([<参数列表>])[throws<异常类>]

其中:异常类可以声明多个,用逗号分割。

原创粉丝点击