English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
例外はプログラム実行中に発生する問題(ランタイムエラー)です。例外が発生すると、プログラムは突然終了し、例外が発生した行の後のコードは決して実行されません。
import java.util.Scanner; public class ExceptionExample { public static void main(String args[]) { Scanner sc = new Scanner(System.in); System.out.println("一番目の数を入力してください:"); int a = sc.nextInt(); System.out.println("二番目の数を入力してください:"); int b = sc.nextInt(); int c = a/b; System.out.println("結果は: "+c); } }
出力結果
一番目の数を入力してください: 100 二番目の数を入力してください: 0 thread "main" java.lang.ArithmeticException: / by zero at ExceptionExample
Javaでは、例外の種類が二種類あります
チェック例外 - チェック例外はコンパイル時に発生する例外で、これらはまたコンパイル時例外とも呼ばれます。これらの例外はコンパイル時に単純に無視することはできません。プログラマーはこれらの例外に注意を払い(処理)する必要があります。
未確認の例外 - 未確認の例外は実行中に発生する例外です。これらはまたランタイム例外とも呼ばれます。これにはプログラミングミス、例えば論理エラーやAPIの使用ミスが含まれます。ランタイム例外はコンパイル時に無視されます。
ランタイム例外/未チェックの例外の表示形式は}}「スレッド主例外」,つまり、ランタイム例外が発生したとき、メッセージはその行から始まります。
以下のJavaプログラムでは、サイズが5の配列にアクセスしようとしました。6の要素で配列を作成し、ArrayIndexOutOfBoundsExceptionが生成されます。
public class ExceptionExample { public static void main(String[] args) { //サイズが5の整数配列 int inpuArray[] = new int[5]; //配列を埋める inpuArray[0] = 41; inpuArray[1] = 98; inpuArray[2] = 43; inpuArray[3] = 26; inpuArray[4] = 79; //アクセスインデックスが配列のサイズを超過しています System.out.println( inpuArray[6]); } }
「main」スレッドで例外が発生しました java.lang.ArrayIndexOutOfBoundsException: 6 at MyPackage.ExceptionExample.main(ExceptionExample.java:14)
以下の例では、サイズとして負の数を使用して配列を作成しようとし、NegativeArraySizeExceptionが生成されます。
public class Test { public static void main(String[] args) { int[] intArray = new int[-5]; } }
実行中に、以下のようなるランタイム例外が生成されます。
「main」スレッドで例外が発生しました java.lang.NegativeArraySizeException at myPackage.Test.main(Test.java:6)
運行時例外を処理し、例外終了を避けることができますが、Javaには特定の運行時例外に対する修復プログラムはありません。具体的には、例外によって必要なコードの変更の種類が異なります。
例えば、上記のプログラムにArrayIndexOutOfBoundsExceptionを修正する必要がある場合、以下を削除する必要があります。/配列アクセスインデックス位置を変更します。
public class ExceptionExample { public static void main(String[] args) { //サイズでinteger配列を作成しています 5 int inpuArray[] = new int[5]; //配列を埋める inpuArray[0] = 41; inpuArray[1] = 98; inpuArray[2] = 43; inpuArray[3] = 26; inpuArray[4] = 79; //アクセスインデックスが配列のサイズを超過しています System.out.println( inpuArray[3]); } }
出力結果
26