LoginSignup
4
4

More than 5 years have passed since last update.

Java SE7 Gold 取得を目指して (9)

Posted at

Java SE7 Gold をとりたい…!

本日は第9回目です。
Java7でいろいろと変更のあった例外についての章でした。

今日のこぼれ話

いろいろなプログラミング言語を操る人々を「言語+er」で読んだりしますよね。Javaer、PHPerとか。
Javaerとか字面はかっこいいんですけど、声に出すと今ひとつだなーと思っていたのですが、Javaristaなんてのがあるらしいです。
Baristaとかけているらしくかっこいいので使おうかな…? まだまだちょっと気恥ずかしいですね。

プログラマーの通り名まとめ

本日知ったこと(7章)

  • try-catch

    • ↓はコンパイルエラー(ただ派生クラス側が処理されないだけだと思っていた)
    public void excec() {
     try {
       someMethod();
     } catch (Exception e) {
       // 親例外クラスが先
     } catch (NullPointerException e) {
       // 派生例外クラスが後
     }
    }
    
    • Java7より↓のコンパイルが通る(6以前ではコンパイルエラー)
    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より派生関係のない例外を|で区切ってマルチキャッチが可能
    catch(IOException | SQLException e) {
     e.printStackTrace();
     // e は final になる
    }
    
  • try-with-resources

    • Java7より
    • 複数リソースは;区切り
    • リソースクラスはClosableまたはAutoClosableを実装する
    • 例外発生 → close() → catch節 → finally節 の順で呼ばれる
    • 複数リソースを取得していた場合、取得順とはclose()が呼ばれていく
    try (MyResource1 res1 = new MyResource1();
         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度も書くようなコードとはおさらば出来るんですね…!

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4