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

标签 java c# using-statement try-with-resources

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

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

等效的 C# 是 using-Statement,基本上做同样的事情。

它们真的完全相同,还是有任何差异(比如它们在后台所做的事情)?

最佳答案

不,它们不完全相同。

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

关于java - .NET using-Statement 和 Java try-with-resources 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28294028/

相关文章:

c# - Class.PropertyName 上的 Switch-Case(不是值)

c# - ASP.NET 核心 : CORS headers only for certain static file types

c# - 显示使用指令的位置

c# - return 语句可以阻止 using 语句关闭与数据库的连接吗?

c++ - '#include' 和 'using' 语句是否应该在头文件和实现文件 (C++) 中重复?

java - 通过本地接口(interface)从 war 访问 ejb in ear

java - 可以在具有相同sharedUserId的应用程序之间共享strings.xml吗?

java - Android 中的后台移动

java - Spring Security 用户详细信息最佳实践

c# - 在 C# 中使用 Bittrex API 调用的无效签名