前言
在理想状态下,用户输入数据的格式永远都是正确的,选择打开的文件也一定存在,并且永远不会出现bug。然而,在现实世界中却充满了不良的数据和带有问题的代码,现在是讨论java程序设计语言处理这些问题的机制的时候了。
error(错误)
error是程序无法处理的严重问题,表示系统级错误,通常由jvm抛出。
示例:
error | 释义 |
---|---|
threaddeath | 线程终止错误 |
outofmemoryerror | 内存不足 |
stackoverflowerror | 栈溢出 |
noclassdeffounderror | 类定义未找到 |
exception(异常)
受检异常(checked exception)
关于受检异常我们必须知道:
- 编译时检查,必须处理否则无法通过编译
- 例子:classnotfoundexception, ioexception
特点:
- 继承自exception但不继承runtimeexception
- 代表预期可能发生的问题
- 必须用try-catch捕获或throws声明
非受检异常(unchecked exception)
关于非受检异常我们必须知道:
- indexoutofboundsexception
- nullpointerexception
特点:
- 继承自runtimeexception
- 编译时不强制处理
- 通常是程序逻辑错误导致
图示总结:
异常处理机制
try-catch-finally
try { // 可能出现异常的代码 } catch (exceptiontype1 e1) { // 处理exceptiontype1 } catch (exceptiontype2 e2) { // 处理exceptiontype2 } finally { // 无论是否发生异常都会执行的代码 }
throws关键字
if (input == null) { throw new nullpointerexception("输入不能为null"); }
图示总结:
自定义异常
创建方法:
// 继承exception或runtimeexception class myexception extends exception { public myexception(string message) { super(message); } }
图示:
异常处理最佳实践
- 精准捕获:不要直接捕获exception,应捕获具体异常类型
- 资源管理:使用try-with-resources替代finally
try (inputstream is = new fileinputstream("file.txt")) { // 使用资源 } catch (ioexception e) { // 处理异常 }
- 异常信息:提供有意义的错误信息
- 避免空catch块:至少记录异常
- 异常转换:将底层异常转换为适合业务层的异常
总结
到此这篇关于java中异常机制的文章就介绍到这了,更多相关java异常机制内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论