Exception 和 Error 的区别
在 Java 中,所有的异常都有一个共同的祖先 java.lang
包中的 Throwable
类。Throwable
类有两个重要的子类:Exception、Error。
它们分别用于表示异常和错误。
-
Exception
:Exception
类是java.lang.Exception
类的基类,它表示可捕获和处理的异常情况。Exception
又分为两种类型:可检查异常(checked exception)和运行时异常(runtime exception)。- 可检查异常(checked exception):继承自
Exception
的异常类,必须在方法签名中显式声明,或者在方法内部进行处理(使用try-catch
块或向上抛出)。典型的可检查异常包括IOException
、SQLException
等。 - 运行时异常(runtime exception):继承自
RuntimeException
的异常类,不需要在方法签名中声明,也可以不进行处理。运行时异常通常是由编程错误或不合理的操作引起的,如空指针异常(NullPointerException
)、数组越界异常(ArrayIndexOutOfBoundsException
)等。
-
Error
:Error
类是java.lang.Error
类的子类,它表示严重的错误情况,通常无法恢复或处理。与异常不同,一般情况下不会捕获和处理错误。Error
表示的是虚拟机或者其他系统级错误,可能导致应用程序无法正常运行。例如OutOfMemoryError
表示内存溢出,StackOverflowError
表示堆栈溢出等。
总结区别:
Exception
用于表示可捕获和处理的异常情况,分为可检查异常和运行时异常。Error
用于表示严重的错误情况,一般不会捕获和处理。- 异常是由程序员引起的,而错误通常是由系统或虚拟机引起的。
- 异常可以通过捕获和处理来恢复程序的正常执行,而错误通常无法恢复。
Throwable 类常用方法有哪些
String getMessage()
: 返回异常发生时的简要描述String toString()
: 返回异常发生时的详细信息String getLocalizedMessage()
: 返回异常对象的本地化信息。使用Throwable
的子类覆盖这个方法,可以生成本地化信息。如果子类没有覆盖该方法,则该方法返回的信息与getMessage()
返回的结果相同void printStackTrace()
: 在控制台上打印Throwable
对象封装的异常信息
Checked Exception 和 Unchecked Exception 的区别
在Java中,异常分为两种类型:Checked Exception(受检异常)和Unchecked Exception(非受检异常)。
-
Checked Exception: Checked Exception是编译时异常,也称为受检异常。它们在代码中被明确声明,并且在方法签名中使用throws关键字进行声明。程序员必须在代码中显式地处理或传递这些异常,否则编译器会报错。这样做的目的是为了强制开发人员处理可能出现的异常情况,以保证程序的稳定性和可靠性。常见的Checked Exception包括IOException、SQLException等。
-
Unchecked Exception: Unchecked Exception是运行时异常,也称为非受检异常。它们通常是由程序错误或逻辑错误引起的,而不是外部因素导致的。与Checked Exception相比,Unchecked Exception不需要在代码中显式声明或捕获,编译器不会强制要求处理这些异常。常见的Unchecked Exception包括NullPointerException、ArrayIndexOutOfBoundsException等。
总结:
- Checked Exception是编译时异常,需要在代码中显式声明并处理或传递。
- Unchecked Exception是运行时异常,不需要在代码中显式声明或处理。
- Checked Exception主要用于强制开发人员处理可能出现的异常情况,以保证程序的可靠性。
- Unchecked Exception通常表示程序错误或逻辑错误,不是外部因素导致的。
需要注意的是,Java中的Error也属于非受检异常,但它通常表示严重的系统错误或资源不足等情况,程序一般无法从中恢复。因此,在正常情况下,我们不会捕获或处理Error。
常见的RuntimeException
-
NullPointerException(空指针异常):当试图访问空对象的成员变量或调用空对象的方法时抛出。
-
IllegalArgumentException(非法参数异常):当传递给方法的参数不满足方法预期的条件时抛出。
-
IllegalStateException(非法状态异常):当对象的状态与方法调用的前提条件不匹配时抛出。
-
IndexOutOfBoundsException(索引越界异常):当使用了无效的索引访问数组、字符串或集合中的元素时抛出。
-
ArithmeticException(算术异常):当执行算术运算时发生错误,例如除以零时抛出。
-
ClassCastException(类型转换异常):当试图将一个对象强制转换为不兼容的类时抛出。
-
UnsupportedOperationException(不支持的操作异常):当调用的方法不支持当前对象的操作时抛出。
-
ConcurrentModificationException(并发修改异常):在使用迭代器遍历集合时,如果在迭代过程中修改集合的结构(增加或删除元素),则会抛出此异常。
这些RuntimeException是Java中常见的非受检异常。它们通常表示程序错误或逻辑错误,是由于编程错误引起的,而不是外部因素导致的。在代码中处理这些异常是可选的,但是应该在代码中进行适当的防御性编程,以避免它们的发生。
更多消息资讯,请访问昂焱数据。