【java入门到放弃】异常
·
结构
Throwable
├── Error(系统级错误)
└── Exception(程序级异常)
├── RuntimeException(运行时异常)
└── CheckedException(编译期异常)
为什么要分错误和异常?
Java 区分 Error 和 Exception,是为了明确:
哪些问题程序可以处理,哪些问题必须放弃。
OutOfMemoryError、StackOverflow。处理不了
ErrorIOException、NullPointerException。可以通过代码处理
为什么要分成运行时异常和编译时异常?
编译时异常本身不是在编译阶段发生的,只是编译器在提醒你“调用这个方法可能会抛出异常,你必须处理它”
也就是java在设计时,提示开发者代码可能会出现这些错误。
Java 没有把所有异常都设计成编译时异常(Checked Exception),是为了在 程序健壮性 和 开发便利性 之间做平衡
处理
捕获异常(try-catch)
声明抛出异常(throws)
throw就是直接抛出异常。
Java 官方库的方法需要我们处理异常,是因为它们在设计时就声明了 throws,而 Java 异常本身是在底层代码里通过 throw 抛出来的。
理解
异常是每个请求独立发生的,本次请求出现异常只影响当前请求线程,下次请求不会受到影响。
如果spring没有处理异常,就会返回500的响应,例如:
HTTP/1.1 500 Internal Server Error
Content-Type: application/json
Content-Length: ...
{
"timestamp": "2026-03-24T10:00:00.000+00:00",
"status": 500,
"error": "Internal Server Error",
"exception": "java.lang.ArithmeticException",
"message": "/ by zero",
"path": "/api/divide"
}
如果自己处理了,就可以自定义返回信息,最终返回的状态码会是200。
更多推荐


所有评论(0)