try-with-resources

tryと言ったらcatch。

catchと言ったらfinally。

所謂Java的常識が、また変わるのか。

今度はtry-with-resources。

finally句の使用は、主にリソースの解放等に使われている。

tryはresourcesと共に・・・。そういうことか!

今までのリソース解放はこんな感じだったはず。

// JavaSE6
// Connectionを解放する。
Class.forName("ドライバ名");
Connection conn =
        DriverManager.getConnection(
            "URL",    //URL
            "ユーザ名",     //ユーザID
            "パスワード"    //パスワード
        );
try {
    // なんか色々処理
catch (Exception e) {
    System.err.println(e.getMessage());
} finally {
    // コネクションをクローズ
    if(null != conn) {
        conn.close();
    }
}

Connection.close()メソッドでもtry-catchしたかな?

それを、こうできる。

// JavaSE7
// Connectionを解放する。
Class.forName("ドライバ名");
try (Connection conn =
        DriverManager.getConnection(
            "URL",    //URL
            "ユーザ名",     //ユーザID
            "パスワード"    //パスワード
        )){
    // なんか色々処理
catch (Exception e) {
    System.err.println(e.getMessage());
}

これで解放されるらしい。

Connectionはされないのかな?そこはまた調べよう。

AutoCloseableというインターフェースの機能が発動するらしい。

独自クラスだと、上記を実装すればいい。

public class Sample implements AutoCloseable {
    /**
     * Sampleクラスのリソース解放処理
     */
    @Override
    public void close() throws Exception {
        // ここにリソース解放の処理を記載
    }
}

リソース解放を意識しなくて済むってことかな?

例外処理発生時にどうするかとか、考えながら実装しないとね。

まだよくわかってないので、また勉強しようっと。