.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
语句可以有 catch
和 finally
块,而你需要有一个单独的 try
/catch
或 try
/catch
/finally
C# 中的块
- 如果
using
语句体抛出异常,然后Dispose
方法抛出异常,则只有后一个异常可用;在 try-with-resources
中,关闭异常是 "suppressed"(因此语句结果是 try
块中的异常),但仍然可以使用 Throwable.getSuppressed
.[= 检索关闭异常40=]
我在学校学过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
语句可以有catch
和finally
块,而你需要有一个单独的try
/catch
或try
/catch
/finally
C# 中的块 - 如果
using
语句体抛出异常,然后Dispose
方法抛出异常,则只有后一个异常可用;在try-with-resources
中,关闭异常是 "suppressed"(因此语句结果是try
块中的异常),但仍然可以使用Throwable.getSuppressed
.[= 检索关闭异常40=]