异常体系结构

本文详细介绍了Java中的异常处理机制,包括编译时异常(如IOException和SQLException)的处理要求,运行时异常(如NullPointerException和ArrayIndexOutOfBoundsException)的处理灵活性,以及错误(如OutOfMemoryError和StackOverflowError)的不可恢复性。还给出了示例代码以展示各种异常的处理方式。
摘要由CSDN通过智能技术生成

异常:【程序在执行过程中】,出现的非正常情况,最终导致JVM的非正常停止

异常并不是语法错误,语法错误编译不通过,不会产生字节码文件,程序根本不能运行

Java处理异常的方式是中断处理,异常本身是一个类,产生异常就是创建一个异常对象并抛出
在这里插入图片描述
Throwable 类是 Java 语言中所有错误 Error 和异常 Exception 的超类

只有此类或其子类之一,才能通过 Java 虚拟机或者 Java throw 语句抛出,才可以是 catch 子句中的参数类型
在这里插入图片描述
一、编译时异常(Checked Exceptions 已检查异常)

在编译时(写代码时)必须显式处理,通常是可以预见的,并且与特定的环境或资源访问有关

IO操作可能抛出IOException,网络操作可能抛出SocketException,JDBC操作可能抛出SQLException

  • 在方法签名中使用throws关键字声明抛出
  • 在方法体内使用try-catch块捕获并处理

二、运行时异常(Unchecked Exceptions 未检查异常,Runtime Exceptions)

运行时异常是RuntimeException类及其子类的实例

在运行时才会被检测到,编译器不要求必须处理,通常由于程序员的编程错误导致

空指针异常NullPointerException、数组越界异常ArrayIndexOutOfBoundsException

不强制要求在方法签名中声明,可以选择捕获处理,也可以选择不处理,由JVM在运行时抛出

最佳实践仍然建议对可能出现的运行时异常进行适当的处理,以提高程序的健壮性和用户体验

三、错误(Error)

Java虚拟机(JVM)中严重的问题,通常与JVM本身、系统资源或其他底层问题有关

错误是不可恢复的,不应该通过代码来捕获处理,意味着程序无法从中恢复并继续执行

常见的错误类型有OutOfMemoryError(内存溢出错误)、StackOverflowError(栈溢出错误)等

public class A {
  
    public static void main(String[] args) {
        A a = new A();
    }
   
     /**
     * 错误
     * java.lang.OutOfMemoryError 内存溢出错误
     * java.lang.StackOverflowError 栈溢出错误
     */
    public A() {  
        // java.lang.OutOfMemoryError 
        // int[] arr = new int[Integer.MAX_VALUE];
        
        // java.lang.StackOverflowError 
        // new A(); // 构造方法中不能创建本类对象,导致无限递归
    }

    /**
     * 编译时异常
     * java.text.ParseException 解析异常
     */
    static void method1() /*throws ParseException*/ {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date date = sdf.parse("1999-09-01");
        } catch (ParseException e) {
            // 打印异常信息
            e.printStackTrace();
        }
        System.out.println("后续代码..."); // 继续执行
    }

    /**
     * 运行时异常
     * java.lang.ArrayIndexOutOfBoundsException 数组索引越界异常
     */
    static void method2() {
        int[] arr = {1, 2};
        try {
            System.out.println(arr[2]);
        } catch (Exception e) {
            // 打印异常信息
            System.out.println(e);
        }
        System.out.println("后续代码..."); // 继续执行
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼悠奕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值