.NET using-Statement 和 Java try-with-resources 之间的区别

Difference between .NETs using-Statement and Javas try-with-ressources

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

在 Java 中有 "try with ressources" 它将 close/dispose 不再使用时的东西(如扫描器)。

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

它们真的完全一样,还是有什么不同(比如它们在后台所做的)?

不,它们完全不一样。

  • try-with-resources语句可以声明多个不同类型的变量; using 语句可以声明多个变量,但它们必须是同一类型
  • using 语句 没有 声明任何变量; using (foo) 很好 - 而 try-with-resources 语句
  • using 语句中声明的变量仍然是可赋值的,尽管它仍然是被释放的初始值,而不是块末尾的值;在 try-with-resources 语句中声明的变量不能在块
  • 中赋值
  • 一个 try-with-resources 语句可以有 catchfinally 块,而你需要有一个单独的 try/catchtry/catch/finally C# 中的块
  • 如果using语句体抛出异常,然后Dispose方法抛出异常,则只有后一个异常可用;在 try-with-resources 中,关闭异常是 "suppressed"(因此语句结果是 try 块中的异常),但仍然可以使用 Throwable.getSuppressed.[= 检索关闭异常40=]