illegalargumentexceptionとは?Java初心者の勉強

illegalargumentexceptionについて学びます。

illegalargumentexceptionとは

illegalargumentexceptionは不正な引数、または不適切な引数をメソッドに渡したことを示すためにスローされます。
illegalには「許容されない」、argumentには「引数」という意味があります。英語の意味が分かれば例外も何となくわかった気になります。

illegalargumentexceptionを発生させよう!

illegalargumentexceptionを発生させてどんな時に起きるのか見てみましょう。

サンプルコード 不正な値の呼び出し

import java.util.ArrayList;
public class Main {
public static void main(String[] args) {    
        ArrayList array = new ArrayList( -20 ); //マイナスの値は不正
    }
}

結果

Exception in thread "main" java.lang.IllegalArgumentException: Illegal Capacity: -20
at java.base/java.util.ArrayList.<init>(ArrayList.java:159)
at Main.main(Main.java:5)

サンプルコード パーセント不正(throw)

illegalargumentexceptionはthrowで発生させている例が多かったので合わせて例文を紹介いたします。

public class IllArgTest {
    void setPercentage(int pct) {
        if( pct < 0 || pct > 100) { // 0-100の間でなければ
           throw new IllegalArgumentException("パーセントが不正(0-100)");
        }
    }
}

public class Main {
    public static void main(String[] args) {
       int percent = 1200;
       IllArgTest obj = new IllArgTest(); //インスタンス化
      obj.setPercentage(percent); // メソッドを呼び出し
    }
}

結果

Exception in thread "main" java.lang.IllegalArgumentException: パーセントが不正(0-100)
at IllArgTest.setPercentage(IllArgTest.java:4)
at Main.main(Main.java:5)

数値が1200のため、0-100の範囲外のためIllegalArgumentExceptionを発生させています。
この場合、変数percentは引数で使われることが想定されており変数として使う前にチェックしたイメージです。

サンプルコード 桁数不正(throw)

他にも桁数を指定したいときなどにも使われていました。

public class Main {
    public static void main(String[] args) {
        String str = "あいうえおかきくけこさ"; // 11桁の文字列
        if(str == null){
            throw new NullPointerException("文字列がnullです");
        }
        if(str.length() > 10){ //範囲外で不正
            throw new IllegalArgumentException("文字列の桁数が多いです(0-10桁まで)");
        }
        System.out.printf("文字列OK");
    }
}

結果

Exception in thread "main" java.lang.IllegalArgumentException: 文字列の桁数が多いです(0-10桁まで)
at Main.main(Main.java:8)

こちらも引数で使用される前のチェックのイメージです。

おわり

APIで引数を渡して不正だった場合詳しくないと、なんで発生したのか把握するのが大変そうですね。
経験値が少ない初心者としては今後悩まされそうな気がします。

参考サイト

IllegalArgumentExceptionとは : JavaA2Z - KAB-studio
https://stackoverflow.com/questions/15208544/when-should-an-illegalargumentexception-be-thrown/34333836

Java

Posted by Nakamoto