例外をスローします:
例外とは、プログラムの実行時にエラーが発生した場合に、呼び出し元 に警告を発する仕組みのことです。例外には多くの種類があり、例外の種類によって意味や処理方法が異なります。例を示します:
public class Demo1 {
public static void main(String[] args) {
int[] arr = {1,2,3};
System.out.println(arr[5]); //配列の添え字が範囲外の例外
}
}
例外の基本的な使い方
例外をキャッチするための基本構文:
try{
可能な例外;
} catch(例外タイプ Exception オブジェクト){
} finally {
例外の終了
}
catchコードブロックとfinallyコードブロックの具体的な状況に応じて追加することができます。
例外が処理されない場合、プログラムは例外に遭遇した時点で終了します。
public class Demo1 {
public static void main(String[] args) {
int[] arr = {1,2,3};
System.out.println("====1=====");
System.out.println(arr[5]);
System.out.println("====2=====");
}
}
出力結果:arr[5]に達すると、配列の添え字が境界外である例外が発生し、プログラムが終了します。そのため、1の出力文のみが出力され、2は正常に出力されません。
例外処理にtryを使用した場合
public class Demo1 {
public static void main(String[] args) {
int[] arr = {1,2,3};
try {
System.out.println("====1=====");
System.out.println(arr[5]);
System.out.println("====2=====");
} catch (ArrayIndexOutOfBoundsException e){
e.printStackTrace(); //例外が発生したコール・スタックを出力する
}
System.out.println("try catchを呼び出す");
}
}
出力結果:
出力から、一度例外に遭遇したtryコードブロックは、実行を続行されませんが、catchコードブロック内のコードを実行するには、catchコードブロックの実行が完了すると、実行を下に続行することがわかります。
また、1 つのコードに複数の例外が存在することもあり、例外によって処理方法が異なるため、 複数の catch コードブロックをマッチさせることができます。例
public class Demo1 {
public static void main(String[] args) {
int[] arr = {1,2,3};
try {
System.out.println("====1=====");
arr = null;
System.out.println(arr[5]);
System.out.println("====2=====");
} catch (ArrayIndexOutOfBoundsException e){
System.out.println("配列添え字の境界外例外");
e.printStackTrace();
} catch (NullPointerException e){
System.out.println("ヌル・ポインタ例外");
e.printStackTrace();
}
System.out.println("try catchを呼び出す");
}
}
出力: arr= NULLなので、NULLポインタ例外はキャッチされるべきです。
コードのfinallyブロックは、最終的な終了を示します。
コードが例外を持つかどうかにかかわらず、finallyブロック内のコードは最終的に実行されなければなりません。
例外処理の流れ
tryブロックで例外が発生した場合、tryブロックは終了し、catchブロックで例外の型が一致するかチェックされます。コード・ブロックがメソッドの終了前に実行されます。高レベルの呼び出し元が一致する例外タイプを持っていない場合、例外は階層上に渡されます。
例外のスロー
Javaでは、例外を投げるいくつかの組み込みクラスに加えて、手動で例外を投げることもできます。
public class Demo1 {
public static void main(String[] args) {
int x = func(2,0);
System.out.println(x);
}
public static int func(int x,int y){
if (y == 0){
throw new ArithmeticException("0による除算例外を投げる");
}
return x/y;
}
}
出力結果:





