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,我们的方法在某些情况下会抛出异常。
否则无法编译( RuntimeExcetpion除外),如下。
如下图 没加 try...catch... 的话,是编不过的
而若 throws RuntimeException 的话,一样可以编过。
有时我们会需要捕到的异常,再往外抛出,而在外面捕获的异常,仍取得原始异常的相关资讯。此时我们便需要使用initCause()这个方法,使用方法如下:
另外,要注意的是 finally不管异常有没有抛出,一定会执行。
可以用於运行一些每次都需要进行的善后工作,比如说关闭网路,清理数据等等。
是将异常処理的代码自功能执行代码中分开,这样使得我们可以用心在正常功能的开发上,而不是混乱地将异常処理和
正常功能的代码混在一块,这样会便於维护。
异常処理原则
1。在合适的层次処理异常,如果你不知道要怎麽処理这个异常,那就不要捕获它。
2。引入异常処理机制後,再次调用发生异常的功能,确保功能正常执行下去。
3。解决发生异常的问题根源,避免异常不断在同一功能发生。
4。尽可能使用规避的方式,以避免异常发生的可能性。
5。尽可能在问题该功能层面解决问题,如果解决不了,将同个异常进行再抛出至上一级层次。
6。必要时终止程序。
7。简化异常処理机制,使其容易使用。
8。使程序或库在执行时更安全。
当抛出异常时,流程如下:
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。使程序或库在执行时更安全。
相关文章推荐
- Eclipse下搭建Hadoop2.7.0开发环境
- java验证码生成
- Spring 第二遍 01
- Spring 第二遍 02 spring IOC应用
- Groovy学习(三)
- java 框架基础知识(8)----国际化信息-->MVC
- Spring注入容器类型List、Map、Properties、Set
- Java正则表达式应用
- java语言基础
- 今天正式开始学习java代码编写
- Java备份mysql数据库及错误总结
- 构建Java并发模型框架
- gradle创建spring-boot项目
- 打地鼠---Java
- ndk c调用java函数
- Hadoop学习笔记之在Eclipse中远程调试Hadoop
- JavaMail实现收发邮件——(二)发送邮件
- Java JDBC批处理插入数据操作
- Java基础知识学习。(2015,6,17)
- 写Spring配置文件时的13个最佳实践