4

私は .net 開発者です。最近、Java と C# の比較に興味を持ちました。C# の using ブロックに相当する Java の try-with-resources を見つけました。しかし、私はそれを完全には理解できませんでした。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 に答える