Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaでIllegalArgumentExceptionを解決する方法は?


IllegalArgumentException メソッドに不正な引数が渡されたことを示すためにスローされます。この例外は、 RuntimeExceptionを拡張します したがって、クラスであり、Java仮想マシン(JVM)の操作中にスローされる可能性のある例外に属します。これはチェックされていない例外であるため、メソッドまたはコンストラクターのthrows句で宣言する必要はありません。

java.lang.IllegalArgumentExceptionの理由
  • 引数が範囲外の場合。たとえば、パーセンテージは1から100の間にある必要があります。ユーザーが101と入力した場合、 IllegalArugmentExcpetion スローされます。
  • 引数の形式が無効な場合。たとえば、メソッドでYYYY / MM / DDのような日付形式が必要であるが、ユーザーがYYYY-MM-DDを渡している場合です。そうすると、私たちのメソッドは理解できなくなり、 IllegalArugmentExcpetion スローされます。
  • メソッドがパラメータとして空でない文字列を必要としているが、null文字列が渡された場合。

例1

public class Student {
   int m;
   public void setMarks(int marks) {
      if(marks < 0 || marks > 100)
         throw new IllegalArgumentException(Integer.toString(marks));
      else
         m = marks;
   }
   public static void main(String[] args) {
      Student s1 = new Student();
      s1.setMarks(45);
      System.out.println(s1.m);
      Student s2 = new Student();
      s2.setMarks(101);
      System.out.println(s2.m);
   }
}

出力

45
Exception in thread "main" java.lang.IllegalArgumentException: 101
at Student.setMarks(Student.java:5)
at Student.main(Student.java:15)

IllegalArgumentExceptionを解決する手順

  • IllegalArgumentExceptionの場合 がスローされた場合は、Javaのスタックトレースで呼び出しスタックを確認し、間違った引数を生成したメソッドを見つける必要があります。
  • IllegalArgumentException 非常に便利で、アプリケーションのコードがチェックされていない入力データを処理しなければならない状況を回避するために使用できます。
  • このIllegalArgumentExceptionの主な用途 他のユーザーからの入力を検証するためのものです。
  • IllegalArgumentExceptionをキャッチしたい場合 次に、try-catchブロックを使用できます。このようにすることで、いくつかの状況に対処できます。特にループの場合に実行を停止するのではなく、ユーザーが再度入力する機会をユーザーに与えるコードをcatchブロックに配置するとします。

例2

import java.util.Scanner;
public class Student {
    public static void main(String[] args) {
        String cont = "y";
        run(cont);
    }
    static void run(String cont) {
        Scanner scan = new Scanner(System.in);
        while( cont.equalsIgnoreCase("y")) {
           try {
               System.out.println("Enter an integer: ");
               int marks = scan.nextInt();
               if (marks < 0 || marks > 100)
                  throw new IllegalArgumentException("value must be non-negative and below 100");
               System.out.println( marks);
            }
            catch(IllegalArgumentException i) {
               System.out.println("out of range encouneterd. Want to continue");
               cont = scan.next();  
               if(cont.equalsIgnoreCase("Y"))
                   run(cont);
               }
          }
     }
}

出力

Enter an integer:
1
1
Enter an integer:
100
100
Enter an integer:
150
out of range encouneterd. Want to continue
y
Enter an integer:

  1. Javaのデフォルトメソッドを使用してダイヤモンド問題を解決する方法

    継承 1つのクラスが他のクラスのプロパティを継承する2つのクラス間の関係です。この関係は、extendsキーワードを使用して-として定義できます。 public class A extends B{} プロパティを継承するクラスはサブクラスまたは子クラスと呼ばれ、プロパティを継承するクラスはスーパークラスまたは親クラスです。 継承では、スーパークラスメンバーのコピーがサブクラスオブジェクトに作成されます。したがって、サブクラスオブジェクトを使用すると、両方のクラスのメンバーにアクセスできます。 多重継承とは、1つのクラスが複数のクラスのプロパティを継承することです。言い換えると、多重継承

  2. JavaでJSONを解析する方法

    このチュートリアルでは、さまざまなライブラリを使用してJavaでJSONを解析する方法を見ていきます。 JSONはJavaScriptObjectNotationの略で、JavaScriptのサブセットに基づいています。 データ交換フォーマットとして、Webプログラミングで広く使用されています。ここでは、org.jsonを使用してJavaでJSONを解析する方法を示します。 ライブラリ。 JSONオブジェクトは、順序付けされていないキーと値のペアのセットです。 JSON配列は、順序付けられた値のコレクションです。値自体はオブジェクトまたは配列である可能性があります。 pageNameの