4

我是.net 开发人员。最近,我对比较 java 和 c# 产生了兴趣。我发现 Java 的 try-with-resources 相当于 C# 的 using 块。但是,我无法完全理解它。我知道 C# 的 using 块是一种语言功能,编译器会为它生成代码。我想更多地了解 try-with-resources 并且对此有几个问题:

  1. 它是类似于 C# 的 using 块的语言功能吗?

  2. 以下内容的等效 JDK 6 代码是什么:

    try(SomeResource resource = new SomeResource())
    {
        //Some logic
    }
    
  3. 以下内容的等效 JDK 6 代码是什么:

    try(SomeResource resource = new SomeResource())
    {
        //Some logic
    }
    catch(SomeException ex)
    {
    }
    
  4. 什么是 C# 的 Reflector 或 ILSpy 工具的 Java 等价物?即反汇编Java字节码类文件并查看其Java代码的工具。

4

1 回答 1

7
  1. 是的,它非常相似。
  2. 等效的java代码是相同的
  3. 等效的java代码也相同
  4. 有几个Java反编译器,但我很喜欢JD-GUI

更新:我误读了你的问题。JDK6 代码看起来像

try {
    final SomeResource resource = new SomeResource();
    Throwable resourceEx = null;
    try {
      //... use resource
    } catch (Throwable t) {
        resourceEx = t;
        throw t;
    } finally {

        if(resource != null) {
            if(resourceEx != null) {
                try {
                    resource.close();
                } catch (Throwable t) {
                    resourceEx.addSuppressed(t);
                }
            } else {
                resource.close();
            }
        }
    }
} catch (SomeException ex) {
//...standard error handling
}
于 2012-07-26T06:28:39.353 回答