JavaSE第九天——异常Exception

一、Java内置异常体系分类

1、Throwable类

Java.lang软件包中有一个java.lang.Throwable类,这个类是java中所有错误和异常的超类

Throwable类有两个子类,Error与 Exception

2、Error 错误

代表系统级别的错误,通常是JVM(Java虚拟机)相关的错误,如OutOfMemoryError(内存溢出错误)等。

这些错误通常是不可恢复的,并且大多数应用程序不应该试图去捕获或处理它们。

常见程序错误分三类:

  • 编译错误:没遵循语法规范

  • 运行时错误:程序在执行时

  • 逻辑错误:程序没有按照预期的逻辑顺序执行

3、Exception 异常

代表程序可能出现的问题,在编程时需要重点关注的。

Exception类又可以分为运行时异常(RuntimeException)和非运行时异常(即编译时异常或已检查异常)。

4、运行时异常(RuntimeException子类

不可查异常,是那些可能在Java虚拟机正常运行期间抛出的异常,但是编译器不会检查这类异常是否被处理;如果编写了一个可能会抛出运行时异常的方法,不需要在方法签名中使用throws关键字来声明这个方法会抛出这些异常

  • 常见的运行时异常包括:

    • NullPointerException:当应用程序试图在需要对象的地方使用null时抛出。

    • ClassCastException 强制失败抛出异常

    • ArrayIndexOutOfBoundsException:当应用程序试图访问数组的非法索引时抛出。

    • ArithmeticException:当出现异常的算术运算条件时抛出,例如除以零。

5、非运行时异常(编译时异常或已检查异常,必须要在方法里面捕获或者抛出

可查异常,是那些编译器会检查是否已经被处理的异常。如果编写了一个可能会抛出非运行时异常的方法,必须在方法签名中使用throws关键字来声明这个方法会抛出这些异常。调用这个方法的代码也必须处理这些异常,或者使用throws关键字再次声明这些方法也可能会抛出这些异常。

  • 常见的非运行时异常包括:
    • ClassNoFoundException 应用程序试图加载类,找不到对应的类
    • IllegalAccessException 拒绝访问一个类的时候
    • NoSuchFieldExcetion 请求的变量不存在
    • NoSuchMethodException 方法不存在
    • IOException:当发生输入/输出错误时抛出。
    • SQLException:当使用JDBC(Java Database Connectivity)与数据库交互时,发生SQL错误或数据库访问错误时抛出。

6、Throwable类定义了一些用于处理错误和异常的核心方法

(1) public String getMessage():异常的详细信息

  (2) public Throwable getCause():异常原因

  (3) public void printStackTrace():打印错误的堆栈信息,即错误输出流,可以看到错误原因和所在位置

7、异常处理机制

Java提供了五个关键字来处理异常:trycatchfinallythrowthrows

  • try:包含可能出现异常的代码块。

  • catch:用于捕获try块中抛出的异常,并处理它。

  • finally:无论try块中的代码是否抛出异常,finally块中的代码都会被执行。它常用于关闭资源或进行清理工作。

  • throw:用于显式地抛出一个异常,需要是 new 异常类

  • throws:用于声明一个方法可能会抛出的异常,但不处理它,即往外抛。throws子句放在方法参数列表的右括号之后,一个方法可以声明抛出多个异常,多个异常之间用逗号隔开

总结:当抛出一个被检查的异常,我们必须使用try-catch块来处理它,或者在方法声明中使用throws子句继续往外抛,由调用该方法去处理异常。

二、多重捕获处理

多重捕获(Multiple Catch)是Java异常处理中的一个重要概念,它允许在单个try块后面跟随多个catch块,捕获不同类型的异常,这种机制使得代码更加清晰和易于管理,特别是在处理多种可能的异常时。

语法:

1、结构:一个try代码块后面可以跟随多个catch代码块,每个catch代码块用于捕获并处理不同类型的异常。

2、顺序catch代码块的顺序很重要。Java会按照catch代码块的顺序进行匹配,将更具体的异常类型放在前面

3、finally块:在try/catch后面添加finally块是可选的,无论是否发生异常,finally代码块的代码总会被执行。finally块通常用于执行清理操作,如关闭文件或数据库连接。

三、自定义异常

如何进行自定义异常:

(1)、异常都是继承自Exception类,所以我们要自定义的异常也需要继承这个基类。

(2)、定义一个新的异常类:继承自ExceptionRuntimeException

(3)、提供构造函数:提供一个或多个构造函数,这些构造函数可以接受一个描述异常详情的字符串,并传递给父类的构造函数。

(4)、(可选)添加其他方法:根据需要,还可以在自定义异常类中添加其他方法或字段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值