异常处理细解加面试常考

这篇文章讲的很细啦!!

详见此链接!!

异常处理

Java异常处理的五个关键字:try、catch、finally、throw、throws。

throw 关键字

作用:使用throw关键字在指定的方法中抛出指定的异常。
使用格式:thorw new xxxException(“异常产生的原因”);
注意:
1. throw关键字必须写在方法的内部。
2. throw关键字后边new的对象必须是Exception或者Exception的子类对象
3. throw关键字抛出指定的异常对象,我们就必须处理这个异常对象

throw关键字后边创建的是RuntimeException或者是RuntimeException的子类,我们可以不处理,默认交给JVM处理(打印异常对象,中断程序)。
  throw 关键字后边创建的是编译异常(写代码的时候报错),我们就必须处理这个异常,要么throws,要么try…catch。

throws关键字

作用:
当方法内部抛出异常对象的时候,那么我们就必须处理这个异常对象。

可以使用throws关键字处理异常对象,会把异常对象声明抛出给方法的调用者处理,一直到最后会交给JVM处理。

使用格式:在方法声明时使用

 修饰符  返回值类型  方法名(参数列表)  throws AAAException, BBBException{
             throw new AAAException("产生原因");
             throw new BBBException("产生原因");
              ..
}      

调用了一个声明抛出异常的方法,我们就必须得处理声明的异常

  • 要么继续使用throws声明抛出,交给方法的调用者处理,最终交给JVM处理,
  • 要么try…catch自己处理异常。

try…catch关键字

格式:
 *      try{
 *          可能产生异常的代码
 *      }catch(定义一个异常变量,用来接收try中抛出的异常对象){
 *
 *          异常的处理逻辑,异常异常对象之后,怎么处理异常对象
 *          一般在工作中,会把异常的信息记录到一个日志中。
 *      }
 *      ...
 *      catch(异常类名 变量名) {
 *
 *      }
 *

下面是一个异常处理的例子。

 public static void main(String[] args) {
        try {
            readFile("C:\\a.tx");
        } catch (IOException e) { // try中抛出什么异常对象,catch就定义什么异常变量,用来接收这个异常对象
            // 异常的处理逻辑,异常对象之后,怎么处理异常对象
//            e.printStackTrace();
//            System.out.println(e.getMessage());
            System.out.println(e.toString());
        }

        System.out.println("执行了后续代码");
    }

    public static void readFile(String fileName) throws IOException {
        if (!fileName.equals("C:\\a.txt")) {
            throw new FileNotFoundException("传递的文件路径不是C:\\a.txt");
        }
        System.out.println("路径没有问题");
    }

finally关键字(理解和收获最大!)

finally代码块中存放的代码都是一定会被执行的。

什么时候的代码必须最终执行?
当我们在try语句块中打开了一些物理资源(磁盘文件/网络连接/数据库连接等),我们都得在使用完之后,最终关闭打开的资源。

try所限定的代码中,当抛出一个异常时,其之后的代码不会被执行。通过finally语句可以指定一块代码。无论 try 所指定的程序块中抛出或不抛出异常,也无论 catch 语句的异常类型是否与所抛出的例异常的类型一致,(这就是 catch 后面语句会不会执行而不用finally造成的后果!)finally所指定的代码都要被执行,它提供了统一的出口。

通常在finally语句中可以进行资源的清除工作。如关闭打开的文件等。

注意:

  • finally里面写return,最后结果一定是执行finally里返回的结果。
  • 所以尽量不在finally里写return语句。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值