了解JDK 7 - 尝试使用资源

Ana*_*tel 4 c# java java-7 try-with-resources

我是.net开发人员.最近,我对比较java和c#感兴趣.我发现Java的try-with-resources相当于C#的使用块.但是,我无法完全理解它.我知道C#的using块是一种语言特性,编译器为它生成代码.我希望对资源尝试有更多的了解,并且几乎没有问题:

  1. 它是一个类似于C#使用块的语言功能吗?

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

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

    try(SomeResource resource = new SomeResource())
    {
        //Some logic
    }
    catch(SomeException ex)
    {
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 什么是Java相当于C#的Reflector或ILSpy工具?即工具来反汇编Java字节码类文件并查看它的Java代码.

Gar*_*ryF 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
}
Run Code Online (Sandbox Code Playgroud)