2023年11月29日发(作者:)

Java_异常类(错误和异常,两者的区别介绍)

Java 中,所有的异常都有⼀个共同的祖先 Throwable(可抛出)。Throwable 指定代码中可⽤异常传播机制通过 Java

⽤程序传输的任何问题的共性。

Throwable 有两个重要的⼦类:Exception(异常)和 Error(错误),⼆者都是 Java 异常处理的重要⼦类,各⾃都包含⼤量

⼦类。

.Exception(异常)是应⽤程序中可能的可预测、可恢复问题。⼀般⼤多数异常表⽰中度到轻度的问题。异常⼀般是在特定

环境下产⽣的,通常出现在代码的特定⽅法和操作中。在 EchoInput 类中,当试图调⽤ readLine ⽅法时,可能出现

IOException 异常。

Exception 类有⼀个重要的⼦类 RuntimeExceptionRuntimeException 类及其⼦类表⽰“JVM 常⽤操作引发的错误。例如,

若试图使⽤空值对象引⽤、除数为零或数组越界,则分别引发运⾏时异常(NullPointerExceptionArithmeticException)和

ArrayIndexOutOfBoundException

.Error(错误)表⽰运⾏应⽤程序中较严重问题。⼤多数错误与代码编写者执⾏的操作⽆关,⽽表⽰代码运⾏时 JVMJava

虚拟机)出现的问题。例如,当 JVM 不再有继续执⾏操作所需的内存资源时,将出现 OutOfMemoryError

检查异常 未检查异常 的划分

Java中的异常分为两⼤类:

d Exception(⾮Runtime Exception

ked ExceptionRuntime Exception

运⾏时异常

RuntimeException类是Exception类的⼦类,它叫做运⾏时异常,Java中的所有运⾏时异常都会直接或者间接地继承⾃

RuntimeException类。

Java中凡是继承⾃Exception,⽽不继承⾃RuntimeException类的异常都是⾮运⾏时异常。

⼀个try后⾯可以跟多个catch,但不管多少个,最多只会有⼀个catch块被执⾏。

对于⾮运⾏时异常(checked exception),必须要对其进⾏处理,否则⽆法通过编译。

处理⽅式有两种:

1.使⽤atch..finally进⾏捕获;

2.在产⽣异常的⽅法声明后⾯写上throws 某⼀个Exception类型,如throws Exception,将异常抛出到外⾯⼀层去。

对于运⾏时异常(runtime exception),可以对其进⾏处理,也可以不处理。推荐不对运⾏时异常进⾏处理。

扩展:错误和异常的区别(Error vs Exception)

1).: Throwable的⼦类,⽤于标记严重错误。合理的应⽤程序不应该去try/catch这种错误。绝⼤多数的错误都是

⾮正常的,就根本不该出现的。

ion: Throwable的⼦类,⽤于指⽰⼀种合理的程序想去catch的条件。即它仅仅是⼀种程序运⾏条件,⽽⾮严

重错误,并且⿎励⽤户程序去catch它。

2).ErrorRuntimeException 及其⼦类都是未检查的异常(unchecked exceptions),⽽所有其他的Exception类都是检查了

的异常(checked exceptions.

checked exceptions: 通常是从⼀个可以恢复的程序中抛出来的,并且最好能够从这种异常中使⽤程序恢复。⽐如

FileNotFoundException, ParseException等。检查了的异常发⽣在编译阶段,必须要使⽤try…catch(或者throws)否则编译

不通过。

unchecked exceptions: 通常是如果⼀切正常的话本不该发⽣的异常,但是的确发⽣了。发⽣在运⾏期,具有不确定性,主要

是由于程序的逻辑问题所引起的。⽐如ArrayIndexOutOfBoundException, ClassCastException等。从语⾔本⾝的⾓度讲,程

序不该去catch这类异常,虽然能够从诸如RuntimeException这样的异常中catch并恢复,但是并不⿎励终端程序员这么做,因

为完全没要必要。因为这类错误本⾝就是bug,应该被修复,出现此类错误时程序就应该⽴即停⽌执⾏。 因此,⾯对Errors

unchecked exceptions应该让程序⾃动终⽌执⾏,程序员不该做诸如try/catch这样的事情,⽽是应该查明原因,修改代码逻

辑。

RuntimeExceptionRuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。

处理RuntimeException的原则是:如果出现 RuntimeException,那么⼀定是程序员的错误。例如,可以通过检查数组下标和

数组边界来避免数组越界访问异常。其他(IOException等等)checked异常⼀般是外部错误,例如试图从⽂件尾后读取数据

等,这并不是程序本⾝的错误,⽽是在应⽤环境中出现的外部错误。

以上这篇Java_异常类(错误和异常,两者的区别介绍) 就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家

多多⽀持。