English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Javaのスレッドmainで例外を処理する方法はどうですか?

例外はプログラム実行中に発生する問題(ランタイムエラー)です。例外が発生すると、プログラムは突然終了し、例外が発生した行の後のコードは決して実行されません。

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
おすすめ