在JLS 11中说:
在抛出异常的过程中, Java虚拟机 一个接一个地突然完成,任何表达式,语句,方法 和构造函数调用,初始值设定项和字段初始化 已开始但尚未在当前执行的表达式 线程。
假设我有以下代码:
public static void m(){
throw new SQLException();
}
public static void d(){
m();
}
public static void main(String[] args){
d();
}
如果由于投掷m()
而导致SQLException
突然完成。 JLS并没有明确表示Java虚拟机突然完成了任何表达式,语句,方法等,出于同样的原因。这可能意味着d()
因抛出SQLException
而出于不同的原因而完成。你能澄清那一刻吗?
答案 0 :(得分:2)
它没有在那里定义,但它在Chapter 14,它谈到了一般的突然完成:
如果语句评估表达式,则突然完成 表达总是导致立即突然完成 声明,出于同样的原因。正常的所有后续步骤 不执行执行模式。
除非本章另有规定,否则突然完成 子语句导致语句的立即突然完成 本身,出于同样的原因,以及正常的所有后续步骤 不执行该语句的执行方式。
因此,我们可以得出结论,它没有被指定用于例外,因为它突然完成的所有可能原因都是正确的,而不仅仅是例外。
答案 1 :(得分:2)