我试图理解错误和异常之间的区别,但是它看起来是一样的,在甲骨文官方教程上我读了这一行。
选中的异常受捕获或指定要求的制约。所有异常都是检查异常,但错误、RuntimeException及其子类指示的异常除外。
现在我觉得这是一样的。但经过更多的研究,我发现了一些理论上的不同之处。
异常:是可恢复的
错误:不可恢复。
异常示例:
try{
read file
}
catch(FileNotFoundException e){
// how I can recover here? can i create that file?
// I think we can just make log file to continue or exit.
}
错误示例:
try{
try to locate memory
}
catch(MemoryError e){
// I think we can just make log file to continue or exit.
}
编辑的我在问关于可恢复和不可恢复的问题。
发布于 2016-03-19 08:12:05
错误,正如你已经知道的,意味着你有了严重的麻烦。在catch块中,您可能可以执行类似于日志的操作,但基本上就是这样。
不可恢复的异常大多是运行时异常,如NullPointerException
。它们通常是程序代码中的一些遗漏检查的结果。因此,解决方案通常是修复代码。
一个可恢复的例外是你事先知道可能发生的事情,并采取某些措施。想想一个web应用程序,它调用了一些后端服务。该服务可能可用,也可能不可用,这可能导致操作的执行失败。因此,您有一个检查过的异常,在这种情况下,很可能是您抛出的自定义异常,然后在前端代码中以这样的方式处理它:您告诉用户,对不起后端服务xy关闭了,稍后再试或联系支持。
可恢复并不意味着应用程序可以做一些事情来解决异常的原因,尽管在某些情况下这是可能的。
发布于 2017-06-28 09:20:17
所有继承自类异常但不是直接或间接地从类RuntimeException继承的类都被认为是检查的,exceptions.Such异常通常是由程序不控制的条件引起的。示例
可恢复的,因此很容易知道如果一个文件不存在,所以您不需要打开该文件,因此这是可恢复的。
RuntimeException的直接或间接子类(包java.lang)的所有异常类型都是未经检查的异常。这通常是由程序代码中的缺陷引起的。示例
Unrecoverable使程序无法从此类错误或异常中恢复
发布于 2021-08-06 04:35:15
不可恢复的错误是将应用程序置于未定义状态的错误,如中断的数据库连接或关闭的端口,您可以处理该错误并继续执行,但这是没有意义的。现代语言如Rust和Go使用名称panic
来表示这些性质的错误,以明确区别。最好的操作是记录错误(如果可能的话),并退出应用程序。
可恢复的错误是我们可以优雅地处理的错误,比如除以零或验证错误。这是预料中的事情,其结果行为将在语言规范中涵盖。是的,当发生可恢复的错误时,应用程序的行为是不稳定的,但是我们可以包含它或处理它。
https://stackoverflow.com/questions/36099102
复制相似问题