エラーと例外

Javaにおけるデータ型と例外処理

Jim White

Java Developer

例外 vs エラー

  • Error は重大な問題
  • アプリはエラーを処理・回復できない
    • エラーはアプリをクラッシュさせる/停止させる
    • 例: Java のメモリ不足はエラー
  • 例外はアプリで処理・回復できる
    • 配列サイズ外の要素アクセスは例外
Javaにおけるデータ型と例外処理
エラーの例
import java.util.*;

public class CauseOutOfMemory {
    public static void main(String[] args) {
        List<Long> numbers = new ArrayList<Long>();
        long counter = 0;
        while (true) {
            numbers.add(counter);
            counter++;
        }
    }
}
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.base/java.lang.Long.valueOf(Long.java:1204)
    at foo/exceptions.CauseOutOfMemory.main(CauseOutOfMemory.java:12)
Javaにおけるデータ型と例外処理

例外の2種類

チェック例外 実行時(「非チェック」)例外
処理の必須性 必須 不要
一般的原因 制御不能な事象 プログラミングミス
回復 想定していれば回復可能 通常は回復困難
対処法 try/catch または throws 回避するよう注意してコーディング
ファイル未発見 配列の範囲外アクセス
Javaにおけるデータ型と例外処理

チェック例外と実行時例外

  • RuntimeException のサブクラスでない Exception のサブクラスは「チェック例外」
    • 必ず対処(処理)する必要がある
    • 例: ファイル未発見(FileNotFoundException
  • RuntimeException は全「非チェック例外」のスーパークラス
    • 処理は必須ではない
    • 例: 存在しない配列インデックスへのアクセス(IndexOutOfBoundsException
    • 例: 0 での除算(ArithmeticException
Javaにおけるデータ型と例外処理

RuntimeException

RuntimeException のサブクラス 送出される状況
ArithmeticException 0 での除算など不正な算術計算
IndexOutOfBoundsException 配列や文字列などのインデックスが範囲外
NegativeArraySizeException 負のサイズで配列を作成しようとした
int y = 5/0; // ArithmeticException を発生させるコード
int[] list = new int[-1];  // NegativeArraySizeException を発生させるコード
Exception in thread "main" java.lang.ArithmeticException: / by zero
Exception in thread "main" java.lang.NegativeArraySizeException: -1
1 See https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/RuntimeException.html
Javaにおけるデータ型と例外処理

チェック例外

public class LoadClass {
    public static void main(String[] args) {
        Class myClass = Class.forName("com.mysql.Driver");
    }
}
LoadClass.java:3: error: unreported exception ClassNotFoundException; 
must be caught or declared to be thrown
                Class myClass = Class.forName("com.mysql.Driver");
                                             ^
1 error
1 See https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Exception.html
Javaにおけるデータ型と例外処理

練習しましょう!

Javaにおけるデータ型と例外処理

Preparing Video For Download...