Java 异常总结

2014-11-24 08:20:09 · 作者: · 浏览: 0

一、什么是异常?


“意料之外”的事情就是异常。

二、Java异常对象结构

Throwable 类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。

* Java异常继承结构
Throwable
Error
Exception
RuntimeException

类名 解释 是否受检异常 是否需要catch异常 分类 是否可恢复
Error 合理的应用程序不应该试图捕获的严重问题,由JVM检查处理 受检 不需要 编译器异常 不可恢复
Exception 合理的应用程序想要捕获的条件 需要 可恢复
RunnableExceptioin 在 Java 虚拟机正常运行期间抛出的异常的超类。(通常是代码错误) 非受检 需要 运行时异常 可恢复


三、Java异常关键字

try、 catch 、throw、throws、finally

四、try关键字

try用途:监听可能出现问题的代码块,并可选择对已知问题进行恢复或终止处理。
try语句块中代码,仅执行到第一个出现异常的地方,try语句块中后续代码都不再执行。
		String str = null;
		int[] array = new int[3];
		
		try {
			str.length();
			int i = array[4];
			System.out.println("try语句块内容执行结束");
		} catch (NullPointerException e) {
			System.out.println("抛出空指针异常");
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("抛出数组越界异常");
		}
输出结果是:抛出空指针异常
try语句块内第一个异常空指针的后续代码都不会执行,即使后续是另外一个异常后者return语句。

五、catch关键字

catch用途:针对try监听到的异常分别进行相应处理。
1. catch分支执行顺序(与swtich不同)
	/**
	 *  出现异常时,catch执行的向后顺序
	 *  	1. 流程是由上至下匹配
	 *  	2. 仅匹配一个(找到一个匹配的catch,之后的都不再执行)
	 *  	3. 子类异常也会被父类异常捕获(可以catch Exception,后续都不会执行)
	 */
	private static void studyCatch() {
		
		String str = null;
		
		try {	
			str.length();
		} catch (NullPointerException e) {
			System.out.println("抛出空指针异常");
		} catch (RuntimeException e) {
			System.out.println("抛出运行时异常");
		}
		
		
		// 以下代码NullPointerException处会提示异常,因为此处根本不可能执行
//		try {	
//			str.length();
//		} catch (RuntimeException e) {
//			e.printStackTrace();
//		} catch (NullPointerException e) {
//			
//		}
	}



2. catch语句块中处理可选方式: 2.1 输出 2.2 转译 2.3 向上抛出

六、throw与throws

1. throw与throws的区别?

Throw

Throws

方法体中

方法头部

执行一定会抛出一种异常

即使执行,只是表示可能会有异常

不会由函数去处理异常,真正的处理异常由函数的上层调用处理。

2. throws 限制

在继承或者覆盖过程中,某个特定的方法“异常说明的接口”不是变大了,而是变小了

七、finally

用途:无论是否出现异常都会执行的代码块
1. finally与return关键字
	/**
	 * return 在try、catch中finally语句块都会被执行
	 * 
	 * 结果:
	 * catch 空指针异常被执行 
	 * finally语句执行
	 */
	private static void finally_return_try_exception() {
		try {
			String str = null;
			str.length();
			return;
		} catch (Exception e) {
			System.err.println("catch 空指针异常被执行 \n");
			return;
		} finally {
			System.out.println("finally语句执行");
		}
	}



2. 异常情况,finally代码块不一定能确保肯定会被执行 程序所在线程死亡;
在前面的代码中用了System.exit();


2013-12-01 星期天 发出blog