Java Exception分类

前言

Throwable 类是所有错误(Error)和异常(Exception)的超类。

  • Error:Error 类表示严重的问题,这些问题通常是Java虚拟机无法或不应该尝试解决的。Error 类及其子类通常表示系统级的错误。
  • Exception:Exception类及其子类表示程序运行时可能会遇到的异常情况,这些异常通常是可以被程序本身捕获并处理的。Exception 类又进一步分为两大类:检查型异常(Checked Exceptions)和非检查型异常(Unchecked Exceptions)。

    检查型异常:在编译时必须被显式处理,否则编译器会报错。处理检查型异常的方式通常是使用try-catch块捕获异常,或者在方法签名中使用throws关键字声明可能会抛出的异常。有这种异常如果不处理,编译都通不过,程序不能启动。

    非检查型异常:也称为运行时异常(RuntimeException),这些异常在编译时不需要被显式处理。程序编译可以通过,运行时根据情况报出异常。

 一. 检查型异常

检查型异常也就是直接继承Exception的异常(RuntimeException及其子类除外)。
如下我们定义一个检查型异常

public class CheckException extends Exception{
    private String errorCode;
}

当我们使用这个异常时

如果我们不处理它,程序就会标红,编译通不过。
而处理它主要也有三种方式:

  1. 为其添加try/catch处理。
    public void fun1(int testCode){        
            try {
                    throw new CheckException();
                } catch (CheckException e) {
                    e.printStackTrace();
                }
    }
  2. 使用 lombok的@SneakyThrows注解。

    它允许开发者在方法签名中不显式声明受检异常(checked exceptions),而是将异常的抛出“隐藏”起来。当方法内部抛出了受检异常时,Lombok 会在编译时自动将这些异常包装成一个 RuntimeException 并抛出,从而避免了在方法签名中使用 throws 关键字。
    使用 @SneakyThrows 可以减少代码中的样板代码(boilerplate code),使代码更加简洁。然而,它也可能导致调用者忽略潜在的错误情况,因为异常不会被强制处理。因此,在使用 @SneakyThrows 时需要谨慎,确保你了解可能抛出的异常,并且调用者能够适当地处理这些异常。

        @SneakyThrows
        public void fun1(int testCode){
            if (testCode == 1){
                throw new CheckException();
            }
        }
  3. 在方法签名中使用throws关键字。也就是把错误抛到更外一级,让外级再处理 
        public void fun1(int testCode) throws CheckException {
            if (testCode == 1){
                throw new CheckException();
            }
        }

 二.非检查型异常

非检查型异常也就是RuntimeException及其子类的异常。这类异常不需要编译(也就是写代码是)时强制校验,如 int i = 1/0,空指针异常等,由于这些异常是允许我们在代码中写且可以编译通过的,只有运行到此处时才会报错,我写程序调试的过程中都经常使用int i = 1/0去模拟和调试一些情况。
如下我们定义了一个非检查型的异常,当我们调用它时译前不做任何处理也不会被标红。

public class UncheckException extends RuntimeException {
    private String errorCode;
}

  • 10
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值