Java异常

一、异常类结构

异常类结构图:(图片地址:https://img-blog.csdn.net/20180920165502957?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21pY2hhZWxnbw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

Java异常_第1张图片

说明:

  • 1.Throwable类:实现了Serializable接口,是所有Exception和Error的父类。
  • 2.Exception和Error:异常可以被捕获处理,可以被JVM抛出或者是用throws抛出;错误不可以被捕获。
  • 3.Checked Exceptions:检查时异常,可以被检查到的异常,必须强制用try...catch捕获处理或用throws抛出,Exception的子类(不包括RuntimeException)都是检查时异常,比如IOException,ClassNotFindException。
  • 4.Unchecked Exceptions:非检查时异常,不可以被检查出来,会由JVM抛出,包括所有Error和RuntimeException异常,比如NullPointerException。

二、处理异常的方法

积极处理

使用try...catch捕获并手动处理异常。异常出现处后面的代码也可以执行。

try{
    //可以出现异常的语句
}catch (异常类型){
    //对异常进行处理
}

注意:当使用多个catch捕获多个异常时,子类异常要写在父类异常的前面。

消极处理

声明方法时抛出(throws)异常,没有对其进行处理。

这种处理是将方法中出现的异常,一层一层向上抛,当前方法抛给调用当前方法的方法,最后抛给main方法,也就是交给JVM来处理,当JVM处理异常后,程序结束,异常后面的代码不会被执行。

以上,异常处理还是使用try...catch,这样即使出现异常也可以保证程序能够运行完毕。

que:throws和throw?

throws表示将异常交给方法的调用处处理,throw表示手动抛出一个异常对象,比如throw new Exception():

public class TestThrow {
	
	public static void main(String args[]) {
		try {
			throw new Exception("抛着玩的。");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
}

三、finally语句

try...catch...finally:

如果出现异常并捕获,finally中的语句会执行,finally之后的语句也会执行。

如果在catch中return,finally中的语句会执行,但是finally语句之后的内容不会执行。如以下代码:

public class TestFinally {
	
	public static void test() {
		String str = "123a";
		try {
			Integer.parseInt(str);
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("出现异常");
			return;
		} finally {
			System.out.println("finally 语句");
		}
                //catch中return,finally之后的内容不会执行
		System.out.println("The end");
	}

	public static void main(String[] args) {
		test();
	}
}

输出结果:

Java异常_第2张图片

综上,finally保证了不管在什么情况下,finally语句块的内容都会执行。

你可能感兴趣的:(Java)