我是从C++来的Java.在C++世界中,我们注意异常安全,并注意,mutator可以在mutator本身抛出的异常或它委托给它的方法(最小,强,无抛出)时提供不同的保证.实现具有强异常保证的方法需要保证一些基本操作永远不会抛出异常.JLS声明哪些操作可以抛出哪种异常,但VirtualMachineError错误会带来问题.答曰JLS:
内部错误或资源限制阻止Java虚拟机实现Java编程语言的语义; 在这种情况下,
VirtualMachineError抛出一个子类的实例 .
JLS没有再说了VirtualMachineError."内部错误"意味着JVM中的一个错误,所以我对这种情况不感兴趣:面对JVM中的错误,所有的赌注都是关闭的.但是那个"资源限制"案例呢?是否存在因资源限制而保证永不失败的操作?
Throwable由于不同帖子中列出的原因,不建议捕捉.但是,有一个像下面这样的主要结构是否有意义?如果删除了Throwable行,则不会记录错误.
public static void main(String[] args) {
try {
launchMyApplication();
} catch (SomeCheckedException e) {
//recover if you can, log it if you can't
} catch (Exception e) {
//recover if you can (unlikely), log it if you can't
} catch (Throwable e) {
//Don't try to recover, but log it
logger.error("Oops: {}", e);
}
}
Run Code Online (Sandbox Code Playgroud)