Developer

【はじめてのJava】例外を発生させる【例外処理編】
2021.09.30
Lv1

【はじめてのJava】例外を発生させる【例外処理編】

はじめてのJava

このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。


例外を発生させる

前回の記事では、「throws」キーワードを利用して例外処理を別の箇所に任せる操作を解説しました。
今回は、例外を処理する方法からは少し離れて、プログラムの中で意図的に例外を起こす方法を解説していきます。

目次


例外を発生させる方法

今までの記事では、何かプログラムの書き方に不備がある場合や、プログラム動作の進行の中で致命的な不具合が発生した場合に、例外が発生すると説明していました。
今回の「意図的に例外を発生させる」という操作をイメージしやすくするために、まずは例外が発生したときにどのような処理が行われているかを簡単に解説します。

プログラムの中で何か不具合が発生すると、実行中のプログラムがそれを検知して、該当する例外クラスのオブジェクトを作成し、不具合が発生する原因となったプログラムが書かれている部分に渡します。
そこで、try-catch句で例外処理を行う記述が書かれていれば、catchブロックの中の処理を行い、プログラム中のどこでもcatchされなかったら、そのまま処理が強制終了します。

意図的に例外を発生させる場合、この中の「例外オブジェクトをプログラムに渡す」という処理をプログラムの中に記述します。


throw

例外を発生させるためには、先ほども記述したように、「例外オブジェクトをプログラムに渡す」という処理を記述します。
この動作を行う際に利用する構文が「throw」です。

[構文]

 throw 例外オブジェクト
       ↑例外クラスのインスタンス化を行う!

(使用例)
if文を利用して、例外を発生させてみる

public class Test{
    public static void main(String[] args){
        try{
            int num = 10;
            
            if( num > 5 ){
                throw new Exception(); 
                //newを利用して例外クラスをインスタンス化する
            }
            
        }catch(Exception e){
            //
            System.out.println("例外が発生しました。");
        }
    }
}

※前回紹介した「throws」と似ていますが、全くの別の意味を持った構文なので注意しましょう!


自作の例外クラス

Javaでは、様々な例外をクラスとして定義していました。
独自でクラスを定義することで、独自の例外用のクラスを作成することもできます。
独自で定義したい例外クラスは、既存の例外クラスを継承して作成します。
一般的には「Exception」クラスを継承して例外クラスを作成します。
[構文]

class OriginalException extends Exception{
    
    public OriginalException(String msg){
        super(msg);
    }
    //インスタンス化した際に、エラーメッセージを受け取るためのコンストラクタを定義します。
}

public class Test{
    public static void main(String[] args){
        try{
            double num1 = 10.0;
            double num2 = 0.0;
            
            if( num2 == 0.0 ){
                throw new OriginalException("独自例外クラスのエラーメッセージ"); 
                //newを利用して例外クラスをインスタンス化する
            }
            
            System.out.println( num1 / num2 );
            
        }catch(OriginalException e){
            //getMessage()メソッドでコンストラクタに渡したエラーメッセージを取得する
            System.out.println(e.getMessage());
        }
    }
}


例外処理編・次回の内容

今回は複数のcatchブロックを利用した例外処理の方法を紹介しました。
今回で例外処理の解説は終了です。例外クラスの扱いは複雑なものが多いので、実際にプログラムを書いて試しながら学習していきましょう。


初めてのJavaシリーズの目次はこちら
例外処理編の記事一覧はこちら


java 11 の練習問題一覧はこちら
はじめてのJavaシリーズの練習問題一覧はこちら