Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 了解JDK 7-使用资源进行尝试_C#_Java_Java 7_Try With Resources - Fatal编程技术网

C# 了解JDK 7-使用资源进行尝试

C# 了解JDK 7-使用资源进行尝试,c#,java,java-7,try-with-resources,C#,Java,Java 7,Try With Resources,我是一名.net开发人员。最近,我对比较java和c产生了兴趣。我发现Java对资源的尝试相当于C#对块的使用。但是,我不能完全理解它。我知道C#的使用块是一种语言特性,编译器为其生成代码。我想更多地了解try with resources,并对其提出一些问题: 它是一个类似于C#的使用块的langauge特性吗 以下代码的等效JDK 6代码是什么: try(SomeResource resource = new SomeResource()) { //Some logic } try

我是一名.net开发人员。最近,我对比较java和c产生了兴趣。我发现Java对资源的尝试相当于C#对块的使用。但是,我不能完全理解它。我知道C#的使用块是一种语言特性,编译器为其生成代码。我想更多地了解try with resources,并对其提出一些问题:

  • 它是一个类似于C#的使用块的langauge特性吗

  • 以下代码的等效JDK 6代码是什么:

    try(SomeResource resource = new SomeResource())
    {
        //Some logic
    }
    
    try(SomeResource resource = new SomeResource())
    {
        //Some logic
    }
    catch(SomeException ex)
    {
    }
    
  • 以下代码的等效JDK 6代码是什么:

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

  • 是的,非常相似
  • 等效的java代码是相同的
  • 等效的java代码也是相同的
  • 有一些Java反编译器,但我非常喜欢
  • 更新:我误解了你的问题。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
    }
    

    接近。catch SomeException块涵盖了资源的初始化。此外,资源关闭逻辑发生在嵌套的try-finally块中,因此如果抛出SomeException,则在控件到达catch-SomeException块之前关闭资源。有关详细信息,请参见JLS 14.20.3.2:@GaryF:在您的代码段中,是否应该在try块中调用SomeResource的构造函数,即:try{resource=new SomeResource()}….?你们都是正确的。事实上,这要复杂得多。我已经更新了我的答案。@GaryF:在您的代码片段中,什么是gzip和gzipEx,声明在哪里?