java throwsについて

呼び出し元に例外処理を投げる

void testB () throws FileNotFoundException {    //・・・①

  FileReader r = new FileReader(“sample.txt”);

  System.out.print(“ファイルを読み込みました”);

}

void testC () { 

     try {

         testB();    //・・・②

     } catch (FileNotFoundException e) {    //・・・③

         System.out.print(“ファイルが存在しませんでした”);    //・・・④

     }

}


上記コードの流れは①で前もってtestBメソッドでFileNotFoundException例外が発生したら呼び出し元にthrowsで例外処理を 投げるようにしておく。②でtestCメソッドの中でtestBメソッドを呼び出している。testBメソッドで例外が発生すると呼び出し元であるtestCに例外が投げられる。③のcatch文が例外をキャッチして④が実行される

java 様々な例外

IndexOutOfBoundsException=配列や文字列、コレクションの範囲外であることを表す例外 ←下記二つのスーパークラス

ArrayIndexOutOfBoundsException=配列の要素の外のアクセスを表す例外

StringIndexOutOfBoundsException=文字列の範囲外を表す例外

 

NullpPointerException=nullに対してメソッドを呼び出すコードを記述した場合に発生する例外

IllgalArgumentException=不正な引数を渡した場合に発生する例外(JVMではなくプログラムが任意にスローする)

IllgalStateException=オブジェクトを異常な状態のまま利用しようとしたときにスローされる例外

ClassCastException=継承関係や実現関係にないクラスにキャストしようとしたときにスローされる例外

 


StackOverflowError=スタック領域というメモリを利用してメソッドなどを実行するがスタック領域は有限なので同じメソッド を呼び出し続ける「再帰呼び出し」を行っているとスタック領域が足らなくなり、JVMがStackOverflowをスローしてプログラ ムが強制終了する

ExceptionInInitializerError=staticイニシャライザで何らかの例外が発生したときにJVMによってスローされるエラー

例外処理における到達不可能なコードについて

SampleException ←(継承) SubException

このような継承関係でcatch文がSampleException、SubException の順番に書かれていた時SubExceptionの例外がスローされてもスーパークラスであるSampleExceptionが例外をcatchできるのでSubExceptionのcatch文に到達することはできない=コンパイルエラーとなる。

java try-with-resourceについて

構文:

try (closeによる後片付けが必要な変数の宣言) {

//例外が発生する可能性がある処理

} catch {

//例外が発生した時の処理

}

※finallyを記述しなくてもtryの後の()の部分を自動でcloseしてくれる

※宣言する変数名はAutoCloseableを実装している必要がある