error expected primary error expected
错误是代码无法真正解决的,如错误(内存溢出、堆栈溢出等jvm方面问题)及资源消耗、配置错误、权限不足等根本性问题。1.错误表示问题严重,程序无法恢复,不建议捕获;2. 资源疲惫类问题需运维介入代码处理;3. 配置错误应修改配置而不临时处理;4. 权限问题需人工授权;5. 外部服务故障应记录日志并停止流程,而不是无限重试。这些问题本质上无法靠try-catch解决,需要系统设计和运维。
在程序运行过程中,Error和Exception都表示“生长问题”的情况,但它们的性质和处理方式完全不同。简单来说:Exception(异常)是程序可以被捕获并处理的,属于程序运行中可以偶然的问题;Error(错误)那么通常是严重的问题,程序本身无法恢复或处理,比如内存溢出、堆栈溢出等。
如果你想哪些“错误”是代码无法捕获的,那就要从Error说起。什么是Error?为什么不能被轻易捕获?
Error表示是JVM(Java) 比如:OutOfMemoryError:内存不足StackOverflowError:梯度过深导致堆栈溢出NoClassDefFoundError:类找不到
这些问题不是由你的代码逻辑直接引发的,而是运行环境出现了不可恢复的故障。虽然技术上你可以用try-catch捕获错误,但在实际开发中不推荐。即使你捕获了,也很难让程序恢复正常运行。举个例子:就像汽车发动机爆炸了,你按喇叭是没有用的。异常分为哪两类?怎么处理更合理?
异常又分为两种类型:
Checked Exception(受检异常)这些异常必须在编译时处理,否则代码无法通过编译。例如:IOExceptionSQLException
处理建议:或者try-catch抛出,或者抛出抛出给调用者。
Unchecked Exception(非受检异常)这些异常继承自 RuntimeException,编译器不会强制你处理。例如:NullPointerExceptionArrayIndexOutOfBoundsException
处理建议:这类异常通常是由于代码逻辑错误引起的,应该在编写阶段就避免,而不是靠catch来兜底。哪些错误是代码无法真正解决的?
除了上面提到的错误类型之外,还有一些“错误”虽然不属于错误,但也很难通过代码彻底解决:资源耗尽:比如数据库连接池满了、线程数超出限制;配置错误:比如数据库地址写错、SSH无效;第三方服务故障:比如远程接口挂掉、网络不通;权限不足:比如没有访问某个目录的权限。
这些情况虽然可能抛出的是异常,但本质上是你无法通过代码来修复的根本性问题。
这个更合适的应对是:记录日志提醒人工介入停止部分功能甚至整个流程总结一下:哪些问题你不该尝试捕获?
简单总结几个不该捕获或无法真正解决的情况:捕获错误方式(如OutOfMemoryError)捕获所有异常的大范围catch(catch (Exception e))对配置错误、权限做临时处理而不是根本配置对外部服务失败问题无限重试停止
这些问题往往不是靠try-catch可以搞定的,但是需要从系统设计、运维上去解决。
基本上就这些。
以上就是Error和Exception的区别:哪些错误无法被代码捕获?的详细内容,更多请关注乐哥常识网其他文章!