您的位置:首页 > 编程语言 > Java开发

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

2015-06-18 00:21 399 查看
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。使程序或库在执行时更安全。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: