.NET使用-James和Javas try-with-ressources之间的区别

kap*_*oky 4 c# java using-statement try-with-resources

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

在Java中,有"尝试使用ressources",当它不再使用时会关闭/处理东西(如扫描仪).

等效的C#是using-Statement,它基本上是一样的.

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

Jon*_*eet 10

不,他们不完全一样.

  • try-with-resources语句可以声明不同类型的多个变量; using语句可以声明多个变量,但它们都必须属于同一类型
  • 一个using声明并不具有声明的变量; using (foo)很好 - 而尝试资源声明
  • using语句中声明的变量仍然是可分配的,尽管它仍然是处理的初始值,而不是块末尾的值; 在try-with-resources语句中声明的变量不能在块中分配
  • 一个try-with-resources语句可以有catchfinally块,而你需要有一个单独的try/ catchtry/ catch/ finally在C#块
  • 如果using语句的主体抛出异常,然后该Dispose方法抛出异常,则只有后一个异常可用; 在try-with-resources关闭的例外中被"抑制"(因此语句结果是try块的异常)但仍然可以使用查找结束例外Throwable.getSuppressed.