Exception 和 Error

Exception 和 Error 的区别

在 Java 中,所有的异常都有一个共同的祖先 java.lang 包中的 Throwable 类。Throwable 类有两个重要的子类:Exception、Error。它们分别用于表示异常和错误。

  1. Exception

    • Exception 类是 java.lang.Exception 类的基类,它表示可捕获和处理的异常情况。Exception 又分为两种类型:可检查异常(checked exception)和运行时异常(runtime exception)。
    • 可检查异常(checked exception):继承自 Exception 的异常类,必须在方法签名中显式声明,或者在方法内部进行处理(使用 try-catch 块或向上抛出)。典型的可检查异常包括 IOExceptionSQLException 等。
    • 运行时异常(runtime exception):继承自 RuntimeException 的异常类,不需要在方法签名中声明,也可以不进行处理。运行时异常通常是由编程错误或不合理的操作引起的,如空指针异常(NullPointerException)、数组越界异常(ArrayIndexOutOfBoundsException)等。
  2. Error

    • Error 类是 java.lang.Error 类的子类,它表示严重的错误情况,通常无法恢复或处理。与异常不同,一般情况下不会捕获和处理错误。
    • Error 表示的是虚拟机或者其他系统级错误,可能导致应用程序无法正常运行。例如 OutOfMemoryError 表示内存溢出,StackOverflowError 表示堆栈溢出等。

总结区别:

  • Exception 用于表示可捕获和处理的异常情况,分为可检查异常和运行时异常。
  • Error 用于表示严重的错误情况,一般不会捕获和处理。
  • 异常是由程序员引起的,而错误通常是由系统或虚拟机引起的。
  • 异常可以通过捕获和处理来恢复程序的正常执行,而错误通常无法恢复。

Throwable 类常用方法有哪些

  1. String getMessage(): 返回异常发生时的简要描述
  2. String toString(): 返回异常发生时的详细信息
  3. String getLocalizedMessage(): 返回异常对象的本地化信息。使用 Throwable 的子类覆盖这个方法,可以生成本地化信息。如果子类没有覆盖该方法,则该方法返回的信息与 getMessage()返回的结果相同
  4. void printStackTrace(): 在控制台上打印 Throwable 对象封装的异常信息

Checked Exception 和 Unchecked Exception 的区别

在Java中,异常分为两种类型:Checked Exception(受检异常)和Unchecked Exception(非受检异常)。

  1. Checked Exception: Checked Exception是编译时异常,也称为受检异常。它们在代码中被明确声明,并且在方法签名中使用throws关键字进行声明。程序员必须在代码中显式地处理或传递这些异常,否则编译器会报错。这样做的目的是为了强制开发人员处理可能出现的异常情况,以保证程序的稳定性和可靠性。常见的Checked Exception包括IOException、SQLException等。

  2. Unchecked Exception: Unchecked Exception是运行时异常,也称为非受检异常。它们通常是由程序错误或逻辑错误引起的,而不是外部因素导致的。与Checked Exception相比,Unchecked Exception不需要在代码中显式声明或捕获,编译器不会强制要求处理这些异常。常见的Unchecked Exception包括NullPointerException、ArrayIndexOutOfBoundsException等。

总结:

  • Checked Exception是编译时异常,需要在代码中显式声明并处理或传递。
  • Unchecked Exception是运行时异常,不需要在代码中显式声明或处理。
  • Checked Exception主要用于强制开发人员处理可能出现的异常情况,以保证程序的可靠性。
  • Unchecked Exception通常表示程序错误或逻辑错误,不是外部因素导致的。

需要注意的是,Java中的Error也属于非受检异常,但它通常表示严重的系统错误或资源不足等情况,程序一般无法从中恢复。因此,在正常情况下,我们不会捕获或处理Error。

常见的RuntimeException

  1. NullPointerException(空指针异常):当试图访问空对象的成员变量或调用空对象的方法时抛出。

  2. IllegalArgumentException(非法参数异常):当传递给方法的参数不满足方法预期的条件时抛出。

  3. IllegalStateException(非法状态异常):当对象的状态与方法调用的前提条件不匹配时抛出。

  4. IndexOutOfBoundsException(索引越界异常):当使用了无效的索引访问数组、字符串或集合中的元素时抛出。

  5. ArithmeticException(算术异常):当执行算术运算时发生错误,例如除以零时抛出。

  6. ClassCastException(类型转换异常):当试图将一个对象强制转换为不兼容的类时抛出。

  7. UnsupportedOperationException(不支持的操作异常):当调用的方法不支持当前对象的操作时抛出。

  8. ConcurrentModificationException(并发修改异常):在使用迭代器遍历集合时,如果在迭代过程中修改集合的结构(增加或删除元素),则会抛出此异常。

        这些RuntimeException是Java中常见的非受检异常。它们通常表示程序错误或逻辑错误,是由于编程错误引起的,而不是外部因素导致的。在代码中处理这些异常是可选的,但是应该在代码中进行适当的防御性编程,以避免它们的发生。

更多消息资讯,请访问昂焱数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值