一篇讲完Java异常及处理

目录

什么是异常?

java是如何处理异常的?

异常的体系结构:

异常的产生和处理:

异常的处理:

throwable类中定义了三个查看异常的方法:

finally代码块:


什么是异常?

异常是指在程序执行的过程中,出现了非正常的情况,最终会导致JVM非正常停止;


java是如何处理异常的?

如果程序在运行过程中出现了异常,那么会产生一个异常对象,程序会把这个异常对象交给JVM处理,JVM就会中断程序,并在控制台打印出这个异常的信息;


异常的体系结构:

最顶层的父类:'java.lang.Throwable',其下有两个子类:'java.lang.Error'和'java.lang.Exception';

Error : 严重的错误,无法处理的错误,只能事先避免;

Exception : 编译期异常(进行编译程序时出现的问题),异常产生后可以通过修改代码纠正,使程序继续运行;

它有一个特殊的子类:RuntimeException(运行期异常),程序在运行过程中出现的问题;


异常的产生和处理:

异常的处理:

throw

可以在指定方法中抛出指定的异常;

使用格式: throw new xxxException("异常产生的原因")

注意事项:

  1. 必须写在方法的内部;
  2. new的对象必须是Exception或者是其子类;
  3. throw关键词抛出指定的异常对象,我们就必须处理这个异常对象;如果是RunTimeException或其子类,可以不处理,默认交给JVM处理(打印异常对象,中断程序);
public static int getElement(int[] arr ,int index){
        if (arr == null){
            throw new NullPointerException("传递的数组为空");
        }else if (index < 0 || index > arr.length-1){
            throw new ArrayIndexOutOfBoundsException("传递的索引超过了数组的范围");
        }

        return arr[index];
    }

方式一 : throws

当方法内部抛出异常对象的时候,我们就必须处理这个异常对象;

可以使用throws关键字处理异常对象,会把异常对象声明抛出给方法的调用者处理(谁调用,谁处理);

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

修饰符 返回值类型 方法名(参数列表) throws AAAException,BBBException{

throw new AAAException("产生原因");

throw new BBBException("产生原因");

}

注意事项 : 

  1. 必须写在方法声明处;
  2. 声明的对象必须是Exception或其子类;
  3. 如果抛出多个异常对象,throws必须也声明多个异常,如果有子父类关系,那么直接声明父类异常即可;
  4. 调用一个声明抛出异常的方法,就必须处理声明的异常,要么继续使用throws声明抛出,交个方法的调用者处理,要么try...catch自己处理异常;
public static void urlPath(String url) throws FileNotFoundException {
        if (!url.equals("C:\\a.txt")){
            throw new FileNotFoundException("文件路径不对");
        }
    }

方式二 : try catch

java中对有可能会造成异常的语句进行捕获,对捕获的异常进行指定方式处理;

使用格式:

try{

编写可能会出现异常的代码;

}catch(异常类型 e){

处理异常的代码;

}

注意事项:

  1. try中可能抛出多个异常对象,可以使用多个catch来处理这些异常;
  2. 如果try中产生了异常,那么就会执行catch中的异常处理逻辑,执行完catch后,继续执行后续代码;
  3. 如果没有产生异常,就不会执行catch中异常的处理逻辑;
 public static void main(String[] args) {
        try {
            urlPath("D:\\a.txt");
        } catch (FileNotFoundException e) {
//            e.printStackTrace();
            System.out.println("文件路径不对");
        }
        System.out.println("后续代码");
    }


    public static void urlPath(String url) throws FileNotFoundException {
        if (!url.equals("C:\\a.txt")){
            throw new FileNotFoundException("文件路径不对");
        }
    }
}

throwable类中定义了三个查看异常的方法:

  1. String getMessage() 返回 throwable的简短描述;
  2. String toString() 返回throwable的详细信息字符串;
  3. void printStackTrace() JVM打印的异常对象,最全面的异常信息;
try {
            urlPath("D:\\a.txt");
        } catch (FileNotFoundException e) {
            System.out.println(e.getMessage());
            System.out.println(e.toString());
            e.printStackTrace();
        }


finally代码块:

使用格式:

try{

编写可能会出现异常的代码;

}catch(异常类型 e){

处理异常的代码;

}finally{

无论是否出现异常都会执行;

}

注意事项:

  1. 必须跟try catch一起使用;
  2. 一般用于资源释放(资源回收),无论程序是否出现异常,最后都要资源释放(IO流知识);
  3. 避免在finally写return;


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值