跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

在Java里unchecked异常有哪些_Java运行时异常说明

unchecked异常指RuntimeException及其子类和Error及其子类,但实际关注重点是RuntimeException体系;其特点是编译不强制捕获、运行时暴露、根源为代码逻辑缺陷,应通过校验和测试预防而非try-catch兜底。 Java里 unchecked 异常就是
RuntimeException
及其所有子类,加上
Error
类及其子类——但实际开发中真正需要你关注的,几乎全是
RuntimeException
体系下的那些。 哪些异常属于 unchecked(编译器不强制捕获) 它们的特点是:编译时不会报错,运行时才暴露,根源基本是代码逻辑缺陷,该修代码而不是硬加 try-catch。
NullPointerException
:调用
null
对象的方法或字段,比如
str.length()
中
str == null
ArithmeticException
:典型如
int c = a / b
中
b == 0
ArrayIndexOutOfBoundsException
:数组访问越界,如
arr[10]
而
arr.length == 5
ClassCastException
:非法强转,如
(Integer)"hello"
IllegalArgumentException
:方法参数明显非法,如
Objects.requireNonNull(null)
或
LocalDateTime.parse("invalid")
IllegalStateException
:对象状态不满足调用前提,如
Iterator.next()
在无元素时调用
ConcurrentModificationException
:遍历集合时被其他线程/代码修改(如增强 for 循环里
list.remove()
) 为什么它们不强制处理?关键在“责任归属” unchecked 异常本质是程序写错了,不是外部环境问题。编译器不拦你,是因为它认为:这类错误本不该发生,你应该靠逻辑校验、单元测试、静态分析(如 SpotBugs)提前发现,而不是靠运行时兜底。 加
try-catch
捕获
NullPointerException
是治标不治本,掩盖了空值来源没校验的问题 用
throws RuntimeException
声明方法可能抛出 unchecked 异常毫无意义——编译器根本不认
Error
(如
OutOfMemoryError
)更不能 catch,JVM 都快崩了,你的业务代码没能力恢复 实战中怎么应对 unchecked 异常 不是不管,而是换种方式“防”和“控”: Eclipse导入Android或其他的JAVA项目的正确方法 WORD版 本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看 下载 立即学习 “ Java免费学习笔记(深入) ”; 用
Objects.requireNonNull(obj, "msg")
主动快速失败,比静默
null
后崩溃更易定位 集合操作优先用
Optional
封装可能为
null
的返回值:
Optional userOpt = Optional.ofNullable(userDao.findById(id)); User user = userOpt.orElseThrow(() -> new BusinessException("用户不存在"));
边界检查前移:参数校验放方法入口(Spring Boot 可用
@Valid
),不用等执行到
array[i]
才爆
IndexOutOfBoundsException
日志中记录异常堆栈时,别只打
e.getMessage()
——
e.printStackTrace()
或用 SLF4J 的
logger.error("xxx", e)
才能保留完整上下文 最容易被忽略的一点:很多团队把
IllegalArgumentException
或
IllegalStateException
当成“提示性异常”随意 throw,却没统一错误码和语义,导致 前端 无法区分是用户输错还是系统故障。这类异常应该有明确契约——什么输入触发、对应哪类业务场景、是否可重试,否则就只是披着异常外衣的隐藏 bug。

相关文章