异常以及异常的处理方式

  • 异常:就是程序出现了不正常的情况, 程序在执行过程中, 数据导致程序不正常,最终会导致JVM的非正常停止。

异常的种类

在这里插入图片描述

  • 编译时异常就是在编译的时候可能出现的异常, 编译时期必须处理, 否则程序无法执行
  • 运行时异常就是在运行时可能出现的异常, 在编译时期不需要处理

异常的本质

  • 当程序中产生异常时, 其实就是在异常的位置创建了一个该异常的对象, 该对象携带了异常相关的信息。因此, 异常就是Java中提供的异常类的对象

异常的体系在这里插入图片描述


异常产生后会怎样

  • 程序中一旦产生异常, 首先会中断向下执行。异常的传递要根据处理方式而定, 如果没有处理, 默认是将异常传递给本方法的调用者。不断往回传递,直到JVM收到该异常,此时程序终止执行。

手动处理异常-声明与抛出

  • 声明异常 - throws
    • 格式: 修饰符 返回值类型 方法名(参数列表) throws 异常类型1, 异常类型2… {…}
    • public void show(int[ ] arr) throws NullPointerException, ArrayIndexOutOfBoundsException{ }
    • 作用
      • 告知调用者当前的方法可能会出现某些异常,使用时需要注意
      • 如果当前的方法中没有出现任何异常, 那么代码会正常执行
      • 如果当前的方法中出现了异常, 会把异常交给本方法的调用者处理
    • 如果声明的多个异常有子父类关系, 那么只要声明一个父类即可(多态)
  • 抛出异常 - throw
    • 抛出异常就是自己手动创建一个异常对象
    • 格式: throw new 异常类名();
    • throw new NullPointerException();
    • 注意:
      • 抛出异常的格式必须在方法的内部完成
      • 如果手动抛出一个异常, 下面的代码无法执行

在这里插入图片描述


手动处理异常-捕获异常

  • 之前的声明或抛出都是将异常传递出去, 让调用者知晓异常信息
  • 捕获异常是在本方法的内部对异常进行处理, 能够阻止异常的传递, 从而保证程序能够继续往下执行
  • 格式:
try{
	存放可能会出现异常的代码
} catch (异常类型 变量名) {
	处理异常方案
	例如 打印异常 将异常原因记录在日志中
}
  • 多异常捕获的处理方案
    在这里插入图片描述

在这里插入图片描述


自定义异常

  • 当JDK中的异常类型, 不满足实际的业务需要时, 就可以自己定义异常, 例如, 学生的年龄数据, 如果是负数或者数据超过了150认为是不合法的, 就需要抛出异常。JDK中就没有表示年龄的异常, 就需要自己定义异常了。
public class AgeOutOfBoundsException extends RuntimeException {
    public AgeOutOfBoundsException() {
    }

    public AgeOutOfBoundsException(String message) {
        super(message); // 传递错误的原因
    }
}
  • 注意:
    • 如果要定义编译时异常 就继承Exception
    • 如果要定义运行时异常 就继承RuntimeException
public class Test01 {
    public static void main(String[] args) {
        checkAge(200);
    }

    public static void checkAge(int age) {
        if (age < 0 || age > 150) {
            throw new AgeOutOfBoundsException("年龄不合法");
        }
        System.out.println("年龄为: " + age);
    }
}

在这里插入图片描述


总结

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值