Java 关于资源试用点(JLS)的澄清
涉及到try with resources语句,我已经看到了JLS8的定义 带有声明多个资源的ResourceSpecification子句的try with resources语句被视为多个try with resources语句,每个语句都有一个声明单个资源的ResourceSpecification子句翻译包含n个资源(n>1)的try-with-resources语句时,结果是包含n-1个资源的try-with-resources语句。在n个这样的翻译之后,有n个嵌套的try-catch-finally语句,整个翻译就完成了 我不明白为什么n-1资源而不是n资源。另一方面,我发现了这个例子。在本例中,作者使用try with finally,而不是try with resources。我不明白他没有使用3次试水(他只使用2次) 此外,我还认为try with resources with n resources等同于n single try with resources,例如:Java 关于资源试用点(JLS)的澄清,java,resources,try-catch,Java,Resources,Try Catch,涉及到try with resources语句,我已经看到了JLS8的定义 带有声明多个资源的ResourceSpecification子句的try with resources语句被视为多个try with resources语句,每个语句都有一个声明单个资源的ResourceSpecification子句翻译包含n个资源(n>1)的try-with-resources语句时,结果是包含n-1个资源的try-with-resources语句。在n个这样的翻译之后,有n个嵌套的try-catch
try(R1; R2; R3) = try(R1){try(R2){try(R3)}}}
因为我认为所有资源都将按顺序创建。而且,这一尝试和上面的资源也最终转化为n try catch
可以吗:)请帮我澄清:)如果你把带有
n
的东西翻译成带有n
的东西,会有什么变化?“try(R1;R2;R3)=try(R1){try(R2){try(R3)}}
”是的,这就是多资源块的等价物。我相信“translation”指的是下面的一章,其中,try with resources转换为try-catch-finally块,finally块中有close()。如果翻译具有多个资源的try,则仅翻译其中一个资源,而剩余的n-1仍然构成具有多个资源的try。然后进一步转换,直到所有n个资源被转换为“经典”try-catch-finally块。因此,最后,在try-with-resources被“完全”转换后,我们将有n个try-catch-finally…此外,我认为这个解决方案只适用于我们不抛出异常(按抛出)的情况,因为当我们抛出异常时,我们不需要最后宣布试捕…对吗@HokOne更多问题:在上面的例子中,我没有看到作者使用try with resources,他只是使用try catch finally(n-1个try块),如果你将带有n
的东西翻译成带有n
的东西,会有什么变化?try(R1;R2;R3)=try(R1){try(R2){try(R3)}
“是的,这就是多资源块的等价形式。我相信“translation”指的是以下章节,其中try with resources被转换为try catch finally块,finally块中有close()。如果翻译具有多个资源的try,则仅翻译其中一个资源,而剩余的n-1仍然构成具有多个资源的try。然后进一步转换,直到所有n个资源被转换为“经典”try-catch-finally块。因此,最后,在try-with-resources被“完全”转换后,我们将有n个try-catch-finally…此外,我认为这个解决方案只适用于我们不抛出异常(按抛出)的情况,因为当我们抛出异常时,我们不需要最后宣布试捕…对吗@HokOne更多问题:在上面的示例中,我没有看到作者使用try with resources,他只是使用try catch finally(n-1个try块)