Think In Java 笔记8 Error Handling with Exceptions

来源:互联网 发布:添加hp打印机 usb端口 编辑:程序博客网 时间:2024/05/29 13:16

Error Handling with Exception
1. 有了这个Exception handler那么我们就可以把处理错误的代码和业务代码更好地分开,也不用自己去check每一个点用if语句(这样会降低可读性)
2. 当一个Exception被throw出来了,那么你就要终止当前context这部分的代码然后去high context进行处理。
3. Exception handler的好处是只要有错误那就强迫程序停下来,而不是像C一样可以忽略错误然后最终走到了极错的情况。
4. 一般的Exception构造器都会有两种一种是默认构造器,还有一种是String参数的message构造器
5. 可以throw 任何Throwable的东西这个是Exception的root类
6. 如果不想用throw离开函数,那可以用try…catch
7. Catch只能有一个参数,不能没有,有且仅有一个参数,这个参数你可以只写类型不写id1,因为或许知道类型已经足够解决任务了
8. Java中有两种机制,一种是termination,另一种是resumption。
Termination就直接跳出程序到另外的地方了
Resumption是处理完错误之后继续原来的程序
大型系统还是Termination用的多,因为Resumption的代码要写出在哪里throw错误,还不是泛型的,提高了代码的维护成本
9. 自己创建Exception类只需要把你的类extends Exception即可,必要的时候重写一下构造器
10. printStackTrance()这个是默认输出System.err
11. Exception and logging,还可以用log去output结果
12. 可以自己override getMessage()这个函数,这个函数对于Exception类来说是必不可少的,都是有的
13. exception specification这是为了告诉使用这个类的程序员这个类到底是什么异常被抛出了
14. void f() throws TooBig, TooSmall, DivZero 这样就是声明了有这些错误会抛出,如果不声明那就是默认的RuntimeException,而且在compile time就会把这个事情完成,Java编译器会检查是否可能会抛异常,如果可能那就一定要写异常声明或者使用try catch
15. 你可以声明了throws的异常声明但是你并没有异常可抛出,这样可以方便你如果之后要抛出异常了,代码不用修改了,这个在create abstract classes and interfaces的时候挺有用的。
16. 可以使用catch (Exception e)这样就可以捕捉任意类型的异常类了。这个异常handler需要放在最后,防止其他特殊的异常类因为它的出现就失效了
17. Exception有这些基类方法

String getMessage( )    //得到特殊的message,通常是自己给定的String getLocalizedMessage( )     //得到message以特定地区的语言String toString( )                //得到简短的这个错误的描述void printStackTrace( )           //默认System.err输出voidprintStackTrace(PrintStream)  //自己定义输出方式voidprintStackTrace(java.io.PrintWriter)

Throwable fillInStackTrace( ) //关于这个被throw出来的物品Stack的信息
18. getStackTrace( )这个函数可以返回Stack中的函数信息,0号method也就是最上面的函数是最后调用的函数,最底下的函数也就是最大号method是最先调用的函数
19. 你catch了一个错误你还可以rethrow这个错误,而且你这个rethrow的错误需要更外围的context 来catch,而且printStackTrace时候的东西还是包括在原来那个throw中
20. 如果你要让一个Exception知道自己是从原先最初的地方抛出来的,你需要在在它的constructor中传这个参数,需要注意的是,只有这三个类可以constructor传递参数,一个是Error,一个是RuntimeException一个是Exception。其他类只能通过initCause()方法传参。
21. RuntimeException可以被抛出但是不被Caught到。
22. 注意就算是return了但是还是会执行finally里的东西

Int fun(){try {print("End");return;} finally {print("Performing cleanup");}}

输出时End和Performing cleanup
23. 要使用checked Exception而不是像runTimeException不用捕捉也可以的。

0 0
原创粉丝点击