58

Eclipseのカスタムフォーマットオプションをいじりながら、サンプルコードの1つで、次のようなコードを見ました。

/**
 * 'try-with-resources'
 */
class Example {
    void foo() {
        try (FileReader reader1 = new FileReader("file1"); FileReader reader2 = new FileReader("file2")) {

        }
    }
}

私はtryこのように使用されるのを見たことがなく、Javaで9年間コーディングしています!なぜあなたがこれをするのか誰かが知っていますか?これを行うことの可能なユースケース/利点は何ですか?

私が見た他のコードは、非常に便利な速記だと思ったので、ここでも共有しています。それが何をするのかはかなり明白です。

/**
 * 'multi-catch'
 */
class Example {
    void foo() {
        try {
        } catch (IllegalArgumentException | NullPointerException | ClassCastException e) {
            e.printStackTrace();
        }
    }
}
4

8 に答える 8

68

これはJava7で追加されました。これはtry-with-resourcesステートメントと呼ばれます。

/編集

これもここに投げ込むかもしれません。Lock次のようなラッパークラスを使用する場合は、try-with-resourcesステートメントを使用してsを管理できます。

public class CloseableLock implements Closeable {
    private final Lock lock;

    private CloseableLock(Lock l) {
        lock = l;
    }

    public void close() {
        lock.unlock();
    }

    public static CloseableLock lock(Lock l) {
        l.lock();
        return new CloseableLock(l);
    }
}

try(CloseableLock l = CloseableLock.lock(lock)) { // acquire the lock
    // do something
} // release the lock

ただし、リソースごとに変数を宣言する必要があるため、これの利点については議論の余地があります。

于 2012-04-11T23:15:13.673 に答える
10

これは、Java 7の新しいtry-with-resourcesステートメントです。http://download.oracle.com/javase/7/docs/technotes/guides/language/try-with-resources.html

于 2012-04-11T23:16:24.970 に答える
6

これらは、JDK7で導入された変更です。

最初のステートメントは、try-with-resourcesです。なぜ存在するのか正確にはわかりませんが、例外は入力ストリームなどによって引き起こされることが多いので、読みやすさが向上するだけだと思います。編集:他の回答者のおかげで、javadocを読みました。これで、AutoCloseableを実装するすべてのi / oストリームが閉じfinallyられ、多くの状況でブロックが不要になることがわかりました。

2つ目はマルチキャッチです。これは、まったく同じ方法で処理するさまざまな例外がある場合に非常に便利です。

于 2012-04-11T23:16:55.277 に答える
2

これは、try-with-resourceと呼ばれます。言語があなたのためにそれをするので、それはあなた自身の後できれいにする必要がないようにする方法です。

于 2012-04-11T23:17:59.033 に答える
2

と同じ使用法using(Resource)ですC Sharp。つまり、プログラムがこのコードブロックから除外されると、このリソースは自動的にリサイクルされます。(私の意見です)

try-with-resourcesステートメントは、ステートメントの最後で各リソースが閉じられるようにします。java.io.Closeableを実装するすべてのオブジェクトを含む、java.lang.AutoCloseableを実装するすべてのオブジェクトをリソースとして使用できます。

try-with-resourcesステートメント

于 2018-06-13T11:50:00.047 に答える
1

これはJava7で追加されました。これはtrywithresourcesと呼ばれます。リソースを試すステートメント機能は、Java7バージョンで導入されました。try with resourceステートメントは、1つ以上のステートメントを宣言するtryステートメントです。リソースは、プログラムが終了した後に閉じる必要があるオブジェクトです。

java 7より前では、finallyブロックを使用して、プログラムで使用したリソースを閉じています。最後のブロックでは、プログラムで使用したすべてのリソースを手動で閉じる必要があります。詳細については、リソースを試してみてください

于 2017-12-11T05:06:25.133 に答える
0

それは、リソースを試してみることで呼び出されます。リソースを使用した試行では、リソースセクションで宣言されたすべての種類のクローズ可能なストリームは、tryステートメントが実行された後に閉じられます。だからそれはほとんどです

try{
InputStream is;
//Stuff
}finally{
is.close()
}
于 2012-04-12T00:49:50.937 に答える
0

try-with-resourcesステートメントは、1つ以上のリソースを宣言するtryステートメントです。リソースは、プログラムが終了した後に閉じる必要があるオブジェクトです。try-with-resourcesステートメントは、ステートメントの最後で各リソースが閉じられるようにします。java.io.Closeableを実装するすべてのオブジェクトを含む、java.lang.AutoCloseableを実装するすべてのオブジェクトをリソースとして使用できます。

于 2019-04-27T13:08:01.430 に答える