Java中编译期异常和运行期异常的区别
在Java中,异常分为运行期异常(Runtime Exception)和编译期异常(Checked Exception),两者的核心区别在于 编译器是否欺压要求处理。以下是它们的具体对比:1. 定义与分类
类别运行期异常(Runtime Exception)编译期异常(Checked Exception)继承关系继承自 RuntimeException(属于Unchecked Exception)直接继承自 Exception(但不继承RuntimeException)处理要求不欺压处理(编译器不查抄)必须显式处理(捕获或抛出,否则编译报错)计划意图表示程序逻辑错误或不可控的运行时标题(如空指针、数组越界)表示可预见的、需要程序主动处理的异常(如文件不存在、网络停止)2. 常见示例
运行期异常编译期异常NullPointerExceptionIOExceptionArrayIndexOutOfBoundsExceptionSQLExceptionClassCastExceptionFileNotFoundExceptionArithmeticException(除零错误)InterruptedException3. 处理方式对比
(1) 运行期异常(Runtime Exception)
[*]无需欺压处理,但建议在代码中主动避免或捕获。
[*]如果未处理,异常会向上传播,最终导致程序瓦解。
[*]典型场景:// 示例:可能抛出NullPointerException
String str = null;
System.out.println(str.length()); // 运行时抛出异常
(2) 编译期异常(Checked Exception)
[*]必须显式处理(否则编译失败)。
[*]两种处理方式:
[*]捕获异常(try-catch)
[*]声明抛出(throws)
// 示例:必须处理IOException(编译期检查)
public void readFile() throws IOException { // 方式1:声明抛出
FileReader file = new FileReader("test.txt");
}
// 或
public void readFile() {
try {
FileReader file = new FileReader("test.txt");
} catch (IOException e) { // 方式2:捕获处理
e.printStackTrace();
}
}
4. 核心区别总结
对比维度运行期异常编译期异常处理欺压力不欺压处理(程序员自行决定是否处理)必须处理(否则编译失败)错误类型程序逻辑错误或不可控的运行时标题外部依赖导致的、可预见的异常代码结实性依赖程序员主动预防(如判空、校验参数)欺压程序员处理潜伏标题典型修复方式通过代码逻辑修复(如避免空指针、数组越界)通过异常处理或资源管理(如重试、关闭毗连)5. 为什么如许计划?
[*]运行期异常:
通常由程序逻辑错误引起(如空指针、除零错误),属于开发者应主动避免的标题。编译器不欺压处理,避免代码冗余。
[*]编译期异常:
表示程序依赖的外部环境可能发生的标题(如文件不存在、网络停止)。欺压处理是为了让开发者明白应对这些可预见的异常,提拔代码可靠性。
6. 实际开发中的建议
[*]运行期异常:
[*]通过代码逻辑避免(如判空、校验数组索引)。
[*]在关键位置捕获处理(如框架层统一处理)。
[*]编译期异常:
[*]优先明白处理(如重试文件读取)。
[*]如果无法处理,可向上抛出并记录日志。
[*]自定义异常:
[*]业务错误通常定义为RuntimeException(避免欺压调用方处理)。
[*]需要调用方主动处理的异常定义为Checked Exception。
一句话总结
[*]运行期异常:程序员的锅,编译器不欺压背锅。
[*]编译期异常: 调用方的锅,编译器要求必须背锅!-
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]