Java的异常体系

Java的问题分为两大类。

Throwable:无论是Error,还是异常,都可以抛出,告知调用者并处理。该体系的特点在于Throwable及其所有的子类都具有可抛性。
 |----1.不可处理的。Error类
 特点:是由JVM抛出的严重性问题。一般不做针对性处理,应直接修改程序。
 |----2.可以处理的。Exception类。

Exception的分类:
  1. 编译时被检测异常:只要是Exception和其子类都是,除了特殊子类TuntimeException体系。
  2. 编译时不检测异常(运行时异常):Exception中的RuntimeException和其子类。
Java异常体系结构是Java语言中用于处理程序运行期间可能出现的错误和异常情况的一种机制。该体系结构以`Throwable`类作为根节点,所有异常类都是它的子类,并且形成了一个树形结构。整个体系可以分为两大分支:`Error`和`Exception`。 ### `Throwable`类 `Throwable`是所有异常类的基类,它定义了异常的基本属性和方法。`Throwable`有两个直接子类:`Error`和`Exception`。通过继承`Throwable`,这些子类能够获得关于异常的信息,比如堆栈跟踪等。 ### `Error`类 `Error`类代表的是严重的系统级问题,这些问题通常不是应用程序可以处理或恢复的。例如,当JVM(Java虚拟机)遇到内存不足或者堆栈溢出等问题时,会抛出`Error`类型的异常。常见的`Error`有`OutOfMemoryError`、`StackOverflowError`等。对于这类错误,通常不建议程序尝试捕获并处理它们,而是应该修复导致错误的根本原因。 ### `Exception`类 `Exception`类表示的是程序可以处理的异常情况。这类异常进一步分为运行时异常(`RuntimeException`)和其他非运行时异常(也称为受检查异常)。运行时异常包括如`NullPointerException`、`IndexOutOfBoundsException`等,它们通常发生在程序运行过程中,但不需要强制捕获。而非运行时异常,例如`IOException`、`SQLException`等,则必须被声明抛出或在代码中被捕获处理,否则编译器将报错。 #### 运行时异常(RuntimeException) 运行时异常是由程序逻辑错误引起的,比如访问空对象的属性、数组越界等。这些异常在编译时不被检查,因此称为非受检查异常。虽然不需要强制捕获,但是良好的编程实践要求开发者应该尽量避免此类异常的发生。 #### 非运行时异常(受检查异常) 非运行时异常是指那些在编译时就会被检查到的异常,比如文件找不到(`FileNotFoundException`)、输入输出操作失败(`IOException`)等。如果一个方法可能会抛出这种类型的异常,那么它必须使用`throws`关键字声明该异常,或者在方法内部捕获并处理它。 ### 异常处理机制 Java异常处理机制采用面向对象的方式,允许开发者通过`try-catch`语句块来监控可能抛出异常的代码段,并提供相应的异常处理逻辑。此外,还可以利用`finally`块确保无论是否发生异常,某些清理工作都能被执行。当异常被抛出时,JVM会查找匹配的`catch`块来处理这个异常。如果没有找到合适的处理程序,那么默认情况下,程序将会终止。 ### 示例代码 下面是一个简单的Java异常处理示例,演示了如何使用`try-catch-finally`结构: ```java public class ExceptionDemo { public static void main(String[] args) { int x = 1; int y = 0; try { System.out.println(x / y); // 可能抛出ArithmeticException } catch (ArithmeticException e) { System.out.println("除数不能为零"); } finally { System.out.println("无论是否发生异常,我都会运行"); } } } ``` 在这个例子中,由于尝试执行除以零的操作,这会导致`ArithmeticException`被抛出。此异常被`catch`块捕获,并打印出一条友好的错误消息。无论是否发生异常,`finally`块中的代码都会执行,保证了资源的正确释放或其他必要的后续操作。 ### 使用建议 - 对于`Error`类型的问题,通常意味着更严重的问题,应着重于预防而不是捕获。 - 对于`Exception`,尤其是受检查异常,应当根据业务需求合理地进行捕获和处理。 - 在编写方法时,如果方法可能抛出受检查异常,则需要明确地在方法签名中用`throws`声明,以便调用者知道需要处理潜在的异常。 通过理解和正确使用Java异常体系结构,开发者能够编写更加健壮和易于维护的应用程序。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值