1错误与异常
所有异常的基础类是throwable
内部错误:程序员通常无能为力,一旦发生,想办法让程序优雅的结束
异常:你自己程序导致的问题,可以捕获、可以处理
错误分类:1用户输入 2设备错误 3物理限制
3异常处理(讲义没有2我也不知道为啥)
(1)异常:程序执行中的非正常事件,导致程序无法再按预想的流程执行
return之外的第二种退出途径
不异常处理的话:正常的逻辑代码与错误处理代码交织在一起
使用异常处理可以将二者分离
(2)异常分类
1、运行时异常 2、其他异常
运行时异常:由程序员在代码里处理不当造成
其他异常:由外部原因造成
非运行时异常,是程序员无法完全控制的外在问题所导致的
即使在代码中提前加以验证(文件是否存在),也无法完全避免失效发生
(3)checked unchecked exception
checked:编译器可帮助检查你的程序是否已抛出或处理了可能的异常
unchecked:Errors and Runtime Exceptions
unchecked:不需要在编译的时候用try…catch等机制处理,但是不用机制有可能failure
try{
可能发生错误的代码
}catch(err){
只有发生错误时才执行的代码
}finally{
无论是否出错,肯定都要执行的代码
}
使用要点:
使用try包裹的代码,即使不出错,效率也比不用try包裹的代码低;
在try中,尽量少的包含可能出错的代码;
无法提前预知错误类型的错误,必须用try catch捕获;
finally可以省略;
摘自cnblogs.com/8023-CHD/p/10930813.html
checked: 必须捕获并指定错误处理器handler,否则编译无法通过
java的异常处理
throws 说明可能抛出
throw 抛出
catch来处理
– 如果客户端可以通过其他的方法恢复异常,那么采用checked exception; – 如果客户端对出现的这种异常无能为力,那么采用unchecked exception;(说的很抽象其实应该是编译提示了就是checked 没提醒就自己设置异常这样)
– 异常出现的时候,要做一些试图恢复它的动作而不要仅仅的打印它的信息。
(4)Declaring Checked Exception by throws
在规约里面声明 @throws程序员必须在方法的spec中明确写清本方法会抛出的所有checked exception, 以便于调用该方法的client加以处理
unchecked异常不需要写在spec中
抛出多个checked异常时,都要在方法签名中列出
如果没有handler来处理被抛出的checked exception,程序就终止执行
不建议生成unchecked 异常与error
(5)How to throw Exception
其实throw就行了没啥好学的
(6)create an exception
没啥好说的java啥都给了(7)Catching Exception
异常发生后,如果找不到处理器,就终止执行程序,在控制台打印出stack trace。
也可以不在本方法内处理,而是传递给调用方,由client处理(“推卸责任”),某些情况下,client更清楚如何处理
(8) Rethrowing and Chaining Exceptions
本来catch语句下面是用来做exception handling的,但也可以在catch里抛出异常,
(9) finally Clause
就算catch有return也会执行finally
(10) The Try-with-Resources (TWR) Statement
对于实现了AutoCloseable接口的资源,Java提供自动close资源的方法
(11) Analyzing Stack Trace Elements
异常处理机制:异常被抛出时,JVM根据异常中的信息查找处理异常的代码
handler,通过调用栈进行反向查找(从栈顶开始),直到找到为止,如果找
不到则终止程序。