Java异常

一.异常继承关系图

在这里插入图片描述
异常体系的顶层由 Throwable 类构成,是所有错误和异常的超类。
Throwable 派生出的主要有两个分支:ErrorException

二. Error和Exception

1.Error

Error 类代表了那些严重的错误,通常与 JVM 的运行状态有关,这些错误在普通情况下不由程序来直接处理。这些错误通常指示着严重的问题,如资源不足、JVM 内部错误、动态链接失败等。这类错误通常被认为不应该被应用程序捕获或处理,而是由虚拟机或者运行环境来处理。常见的 Error 包括:

  • OutOfMemoryError
  • StackOverflowError
  • NoClassDefFoundError
  • UnsatisfiedLinkError

2. Exception

Exception 类是直接从 Throwable 派生的,用于表示那些应由应用程序处理的情况。异常分为两种:

  • 检查型异常(Checked Exceptions):这些异常必须在方法声明中通过 throws 关键字声明,或者在方法内部通过 catch 块捕获。这类异常表示那些在正常编程时可能被预见并通过适当的处理代码处理的情况。例如,IOExceptionSQLException

  • 非检查型异常(Unchecked Exceptions):这类异常包括运行时异常(RuntimeException)和它们的子类。这些异常不需要在方法声明中被显式声明,它们通常表示编程错误,如逻辑错误或错误的算法。常见的运行时异常包括:

    • NullPointerException
    • IndexOutOfBoundsException
    • ArithmeticException
    • IllegalArgumentException

总结

检查型异常需要编译时必须被处理,非检查型异常需要程序员修改代码逻辑,Error一般会是系统级错误

三.常用的异常方法

在 Java 中处理异常时,Throwable 类及其子类提供了一系列方法,这些方法对于诊断和处理异常非常有用。以下是一些最常用的异常方法:

1. getMessage()

  • 用途:返回异常的详细消息字符串。
  • 说明:这个方法通常用于提供关于异常的更详细的解释,帮助理解异常的原因。

2. getLocalizedMessage()

  • 用途:返回本地化的异常消息。
  • 说明:这个方法类似于 getMessage(),但它允许产生一个针对特定地区的错误消息。默认实现只是调用了 getMessage()

3. toString()

  • 用途:返回异常的简短描述,通常包含异常的类名和消息。
  • 说明:这个方法用于获取异常的字符串表示形式,包括异常类型和消息内容,常用于日志记录。

4. printStackTrace()

  • 用途:打印异常及其回溯栈到标准错误流。
  • 说明:这个方法提供了一种快速方式,用于在控制台上打印异常发生时调用堆栈的跟踪,这对于调试是非常有用的。

5. getStackTrace()

  • 用途:返回一个 StackTraceElement 数组,表示异常发生时的堆栈跟踪。
  • 说明:每个 StackTraceElement 包括了方法调用的详细信息,如类名、文件名、行号等。

6. getCause()

  • 用途:返回此异常的原因(另一个 Throwable 对象),如果原因不存在或未知,则返回 null
  • 说明:这个方法用于获取异常链中的下一个异常。

7. initCause(Throwable cause)

  • 用途:初始化异常的原因。
  • 说明:这个方法可以在构造异常对象后设置其原因,用于构建异常的链条。

8. fillInStackTrace()

  • 用途:填充堆栈跟踪信息。
  • 说明:此方法会更新或填充调用此方法时的调用堆栈信息。在自定义异常中用于重置堆栈跟踪信息。

四.自定义异常

checked需要继承Exception,unchecked需要继承RuntimeException及其子类

1.自定义检查型异常

在这里插入图片描述

2.自定义非检查型异常

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值