5

我在学校学习了 C#,现在我开始学习 Java。

在 Java 中有“try with ressources”,它会在不再使用时关闭/处理东西(如扫描仪)。

等效的 C# 是 using-Statement,它的作用基本相同。

它们真的完全一样吗,或者有什么不同(比如他们在后台做什么)?

4

1 回答 1

11

不,它们并不完全相同

  • try-with-resources语句可以声明多个不同类型的变量;using语句可以声明多个变量,但它们都必须是相同的类型
  • using语句不必声明任何变量;using (foo)很好 - 而 try-with-resources 语句
  • 在语句中声明的变量using仍然是可赋值的,尽管它仍然是被释放的初始值,而不是块末尾的值;语句中声明的变量try-with-resources不能在块内赋值
  • 一个try-with-resources语句可以有catchfinally块,而你需要在 C#中有一个单独的try/catchtry/ catch/块finally
  • 如果using语句体抛出异常,然后Dispose方法抛出异常,则只有后一个异常可用;在try-with-resources关闭异常被“抑制”(因此语句结果是try块中的异常)但关闭异常仍然可以使用Throwable.getSuppressed.
于 2015-02-03T08:11:09.437 回答