关闭

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

2601人阅读 评论(0) 收藏 举报
分类:

 

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

 

捕获异常:如果程序出现了异常,就能够详细的打印是什么原因导致了异常并且能够做出相应的处理,能够显示详细的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<异常类>]

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:325153次
    • 积分:8906
    • 等级:
    • 排名:第2227名
    • 原创:1096篇
    • 转载:14篇
    • 译文:0篇
    • 评论:5条
    最新评论