JavaSE核心技术——异常处理

一、异常
1、异常的定义

    运行期间出现的错误,而不是编译时的语法错误
例如,
    打开一个不存在的文件
    网络连接中断
    操作数组越界等

2、异常类型

检查性异常(checked exception)
    若系统运行时可能产生该类异常,则必须写出相应的处理代码,否则无法通过编译
    非RuntimeException异常
非检查性异常(unchecked exception)
    若系统运行时可能产生该类异常,则不必在程序中声明对该类异常的处理,就可以编译执行
    RuntimeException:运行时异常

3、异常处理机制

自行处理:
    可能引发异常的语句封入在 try 块内,而处理异常的相应语句则封入在 catch 块内。
回避异常:
    在方法声明中包含 throws 子句,通知潜在调用者,如果发生了异常,必须由调用者处理。

4、try…catch 语句

catch块,是用来捕获并处理try块抛出的异常的代码块。没有try块,catch块不能单独存在。我们可以有多个catch块,以捕获不同类型的异常
如果程序抛出多个不同类型的异常,我们需要多个catch()语句来处理。
和特殊异常类相关联的catch()块必须写在和普通异常类相关联的catch()之前。
try{…}catch( ){…}之间不可以添加任何代码

5、finally 语句

finally语句放在trycatch语句后
fianlly语句中的代码块不管异常是否被捕获总是要执行
通常在finally语句中可以进行资源的清除操作,如:关闭打开文件、删除临时文件
对应finally代码中的语句,即使try代码块和catch代码块中使用了return语句退出当前方法或般若break跳出某个循环,相关的finally代码块都有执行。
当trycatch代码块中执行了System.exit(0)时,finally代码块中的内容不被执行

6、throws 关键字

如果一个方法中的语句执行时可能生成某种异常,但是并不能确定如何处理,则可以在程序所在的函数声明后,使用throws关键字抛出异常
位置:函数参数列表的后面
throws关键字后面,可以跟多个异常,中间用逗号分割
throws关键字抛出的异常,由调用该函数的函数处理。

7、方法中如果用throws关键字抛出:


    非检查性异常:
        上一级去除异常,直到不抛出异常;
    检查性异常
        在调用该函数内try-catch,把异常处理掉。那么不往上一级抛出异常,程序正常执行,上一级方法并不知道曾经产生异常。
        用throws声明方法抛出异常,不进行处理。谁调用谁负责处理
        覆盖方法抛出异常时,可以抛出与被覆盖方法相同的异常或者被覆盖方法异常的子类异常

7、throw

异常是通过关键字 throw 抛出,程序可以用throw语句引发明确的异常。如:
throw语句用在方法体内,表示抛出异常,由方法体内的语句处理。不能单独使用,要么和try.. catch…一起使用,要么和throws一起使用。
throw语句的操作数一定是Throwable类类型或Throwable子类类型的一个对象

猜你喜欢

转载自blog.csdn.net/qq_37067955/article/details/81782636