Exception和Error有什么区别?运行时异常和一般异常有什么区别?

本文深入探讨Java中的异常处理机制,包括Error与Exception的区别,运行时异常与一般异常的特性,以及如何正确使用try-catch-finally等语句进行异常处理。文章强调了自定义异常的重要性,并提供了异常处理的最佳实践。

Exception和Error有什么区别?运行时异常和一般异常有什么区别?
Error和Exception都继承了Throwable类,在Java中只有Throwable类的实例才可以抛出或者捕获,
它是异常处理机制的基本类型。
Exception又分为checked编译异常和unchecked运行异常。
1.理解Throwable,Exception,Error的设计和分类。
比如掌握哪些应用面最广的子类,自定义异常。

你了解哪些Error,Exception或RuntimeException?

2.理解Java语言中操作Throwable的元素和实践。基本的语法,try-catch-finally,throw,throws.
try-with-resource,multiple catch

异常处理的2个基本原则:
1.尽量不要捕获类似Exception这样的通用异常,
而是要捕获特定异常。
2.不要生吞异常。
往往基于假设这段代码可能不会发生,或者感觉忽略异常无所谓。
throw early,catch late.

自定义异常:
是否需要定义成checked Exception
信息数据的安全,比如用户数据不能输出到日志中去

### Java 中 Exception Error区别及用法 在 Java 中,`Exception` `Error` 都是 `Throwable` 类的子类,用于表示程序运行过程中可能出现的问题。以下是它们的主要区别用法: #### 1. 定义与用途 - **Exception异常)** `Exception` 表示程序正常运行过程中可以预料到的意外情况[^1]。它通常是由外部因素或程序逻辑问题引起的,例如文件未找到、网络连接失败等。开发者应该捕获并处理这些异常以确保程序的健壮性。 - **Error(错误)** `Error` 表示在正常情况下不太可能出现的情况[^4]。它通常是由系统资源耗尽或 JVM 内部问题引起的,例如内存不足 (`OutOfMemoryError`) 或栈溢出 (`StackOverflowError`)。由于这些错误通常是不可恢复的,因此不建议开发者捕获或处理 `Error`。 #### 2. 继承关系 `Exception` `Error` 都继承自 `Throwable` 类。只有继承自 `Throwable` 的实例才能被 `throw` 或 `catch`。 #### 3. 可检查性 - **Checked Exception(受检查异常)** 这些异常必须在编译显式处理,否则会导致编译错误[^3]。常见的 `Checked Exception` 包括 `IOException` `SQLException`。开发者需要通过 `try-catch` 块捕获或使用 `throws` 关键字声明。 - **Unchecked Exception(非受检查异常)** 这些异常不需要在编译处理,通常是由程序逻辑错误引起的,例如 `NullPointerException` 或 `ArrayIndexOutOfBoundsException`。它们继承自 `RuntimeException`,属于 `Exception` 的子类。 #### 4. 处理方式 - 对于 `Exception`,开发者可以通过以下方式处理: - 使用 `try-catch` 块捕获异常并进行相应处理。 - 在方法签名中使用 `throws` 关键字将异常向上抛出[^5]。 - 对于 `Error`,通常不建议捕获或处理,因为它们通常表示严重的系统问题,无法通过程序逻辑解决[^4]。 #### 5. 常见类型 - **Exception 类型** - `IOException`:输入输出异常。 - `SQLException`:数据库操作异常。 - `ClassNotFoundException`:找不到指定类。 - **Error 类型** - `OutOfMemoryError`:内存不足。 - `StackOverflowError`:栈溢出。 - `NoClassDefFoundError`:类定义丢失。 - `AssertionError`:断言失败。 #### 示例代码 以下是一个简单的代码示例,展示如何处理 `Exception` 忽略 `Error`: ```java public class ExceptionVsErrorExample { public static void main(String[] args) { try { // 模拟一个可能抛出异常的操作 readFile("nonexistent.txt"); } catch (FileNotFoundException e) { System.out.println("文件未找到: " + e.getMessage()); } try { // 模拟一个可能导致 Error 的操作 int[] array = new int[Integer.MAX_VALUE]; // 可能导致 OutOfMemoryError } catch (Error e) { // 通常不建议捕获 Error System.out.println("出现严重错误: " + e.getMessage()); } } public static void readFile(String fileName) throws FileNotFoundException { if (!fileName.contains(".txt")) { throw new FileNotFoundException("文件名无效: " + fileName); } } } ``` ### 总结 `Exception` `Error` 的主要区别在于它们的用途可恢复性。`Exception` 是程序可以预料并处理的异常,而 `Error` 通常表示严重的系统问题,无法通过程序逻辑解决。开发者应根据具体场景选择合适的处理方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值