Java之异常处理

捕获异常

我们眼中的关于异常的基本结构:

try {
    //      
    } catch (Exception e) {
    //      
    } finally {
    //
}

try语句块内是监视区域,catch语句块内是异常发生时的异常处理程序,finally内子句无论如何都会执行,就算在try或catch中return也是一样,这里我们一般会清理一些内存之外的资源,例如数据库连接、打开的文件等。

异常说明

一个方法可能抛出的异常在方法名处声明,这样可以方便处理,关键字:throws。
例:

void f() throws FileNotFoundException{}

当一个方法中产生了异常时要么处理要么在方法处说明。有趣的是我们可以说明异常,而实际上不产生异常,以后我们就可以在方法处抛出异常而不用再说明。

自定义异常

Java中并不会将所有的异常定义,这个时候就需要一些我们自定义的异常。
例:

class MyException extends Exception{
    public MyException(){}
    public MyException(String msg){//我们可以将信息传递给异常类
        super(msg);
    }
}
构造器与异常

当有异常发生时,我们必须考虑是否一些必要的清理工作已经进行,一般情况下finally可以直接处理,但假如我们只是在构造器中打开文件,那么肯定不会在构造器中执行清理,我们需要在使用完毕后执行清理。但有一种情况,我们已经打开文件,但是发生了其他异常,那么文件资源会被正确的关闭吗?不会。
我们可以这样做:

BufferedReader in = null;
        try {
            in = new BufferedReader(new FileReader("filename"));
        }catch(FileNotFoundException e){
            //出现未找到文件异常不必关闭文件
        }
        catch (Exception e) {//其他异常还是需要关闭文件
            try {
                in.close();
            } catch (IOException e1) {
            }
        } finally {
            //不执行关闭功能
        }

若我们需要在构造器中读取文件并关闭,则这样:

BufferedReader in = null;
        try {
            in = new BufferedReader(new FileReader("filename"));
            try {
                //读取
            } catch (Exception e) {
                //若读取时有异常则进行处理
            }finally{
                in.close();
            }
        }
        catch (Exception e) {
            //打开文件异常
        }

处理基本规则:在创建需要清理的对象之后,立即进入一个try-finally语句块。

处理被检查异常

被检查的异常:在编译时被强制检查的异常,必须抛出或者处理。如FileNotFoundException.
不受检查的异常:RunTimeException,被自动捕获。主要是一些编程错误。
处理被检查的异常我们一般有两种方式:
1、重新抛出一个RuntimeException。
2、直接在方法处说明异常

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值