JAVA 复习(Think In Java, 4th) -- Error Handling with Exceptions

JAVA 异常処理的目的是使用较精简的代码制造出大型、可靠,且无未処理错误的程序

当抛出异常时,流程如下:

1。异常对象如一般 Java 对象那样产生出来(ex: new RuntimeException())

2。当产生异常对象後,程序不能正常的继续往下执行,然後执行引用的对象自上下文(Context)取出。

3。异常処理机制开始执行,寻找合适的程序以继续执行程序。

4。异常処理程序(Exception Handler)接手


在 try 块中若抛出了异常,则可以捕获异常,而各个 catch() 就是异常処理
同时,我们可以使用 throws 关键字,来提醒使用我们方法的 Programmer,我们的方法在某些情况下会抛出异常。

try {
    // 可能发生异常的代码块

} catch(异常种类1 e) {
    // 异常种类1 的相关処理

} catch(异常种类2 e) {
    // 异常种类2 的相关処理

}
当我们使用 throws 关键字时,就算里面没有抛出异常,java 编译器也会要求方法使用者加上 try...catch... 
否则无法编译( RuntimeExcetpion除外),如下。

public class testException {
	public static void main(String[] args) {
		try {
			foo();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public static void foo() throws Exception {
		System.out.println("foo");
	}

}

如下图 没加 try...catch... 的话,是编不过的

而若 throws RuntimeException 的话,一样可以编过。


有时我们会需要捕到的异常,再往外抛出,而在外面捕获的异常,仍取得原始异常的相关资讯。此时我们便需要使用initCause()这个方法,使用方法如下:

public class testException {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			second();
		} catch (Throwable e) {
			e.printStackTrace(System.out);
		}

	}

	public static void second() throws Throwable {
		try {
			first();
		} catch (ShanwuException e) {
			throw new Exception().initCause(e);
		}
	}

	public static void first() throws ShanwuException {
		throw new ShanwuException();
	}

	private static class ShanwuException extends Exception {
		public ShanwuException() {
			super("Shanwu Exception发生了!");
		}
	}
}



另外,要注意的是 finally不管异常有没有抛出,一定会执行
可以用於运行一些每次都需要进行的善后工作,比如说关闭网路,清理数据等等。

try {

} finally {

}
异常処理的最高指导原则是「 如果你不知道要怎麽処理这个异常,那就不要捕获它」事实上,异常処理的其中一个目标,
是将异常処理的代码自功能执行代码中分开,这样使得我们可以用心在正常功能的开发上,而不是混乱地将异常処理和
正常功能的代码混在一块,这样会便於维护。

异常処理原则
1。在合适的层次処理异常,如果你不知道要怎麽処理这个异常,那就不要捕获它。
2。引入异常処理机制後,再次调用发生异常的功能,确保功能正常执行下去。
3。解决发生异常的问题根源,避免异常不断在同一功能发生。
4。尽可能使用规避的方式,以避免异常发生的可能性。
5。尽可能在问题该功能层面解决问题,如果解决不了,将同个异常进行再抛出至上一级层次。
6。必要时终止程序。
7。简化异常処理机制,使其容易使用。
8。使程序或库在执行时更安全。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值