Java SE7 Gold をとりたい…!
本日は第9回目です。
Java7でいろいろと変更のあった例外についての章でした。
今日のこぼれ話
いろいろなプログラミング言語を操る人々を「言語+er」で読んだりしますよね。Javaer、PHPerとか。
Javaerとか字面はかっこいいんですけど、声に出すと今ひとつだなーと思っていたのですが、Javaristaなんてのがあるらしいです。
Baristaとかけているらしくかっこいいので使おうかな…? まだまだちょっと気恥ずかしいですね。
本日知ったこと(7章)
- try-catch
-
↓はコンパイルエラー(ただ派生クラス側が処理されないだけだと思っていた)
try {
someMethod();
} catch (Exception e) {
// 親例外クラスが先
} catch (NullPointerException e) {
// 派生例外クラスが後
}
}* Java7より↓のコンパイルが通る(6以前ではコンパイルエラー) ```java public void excec() throws MyException1, MyException2 { try { if (!check1()) { throw new MyException1(); } if (!check2()) { throw new MyException2(); } } catch (Exception e) { e.printStackTrace(); throw e } }-
Java7より派生関係のない例外を
|で区切ってマルチキャッチが可能
e.printStackTrace();
// e は final になる
} -
- try-with-resources
-
Java7より
-
複数リソースは
;区切り -
リソースクラスはClosableまたはAutoClosableを実装する
-
例外発生 → close() → catch節 → finally節 の順で呼ばれる
-
複数リソースを取得していた場合、取得順とは逆に
close()が呼ばれていく
MyResource2 res2 = new MyResource2()) {
someMethod();
// res2.close()
// res1.close()
} catch (Exception e) {
}* try-with-resource内とcloseの両方で例外が発生した場合closeでの例外は抑制される * 取得したければ `e.getSuppressed()` -
- アサーション
- アサーション有効化は
java -ea XXXX - プログラム中のバグを発見する機能なのでコード上からハンドリングできないようになっている
- アサーション有効化は
try-with-resources、これでやっとファイルの読み書きだけでtry-catchを2度も書くようなコードとはおさらば出来るんですね…!