how handle arrayindexoutofboundsexception java
このチュートリアルでは、Java配列によってスローされる重要な例外、つまりArrayIndexOutOfBoundsExceptionと簡単な例について詳しく説明します。
以前のチュートリアルで配列についてすべて学びました。配列は本質的に静的であり、その次元またはサイズは宣言時に決定されます。また、このサイズまたは配列に対して宣言された要素の数は固定されており、0から番号が付けられていることもわかっています。
暗号化されたDVD用の最高の無料DVDリッパー
プログラムロジックは、プログラムが存在しないインデックスから要素にアクセスしようとするようなものである場合があります。 例えば、 プログラムの不具合により、プログラムが11にアクセスしようとする場合がありますth10個の要素の配列内の要素。これにより、異常な状態になります。
Javaは、存在しない配列インデックスにアクセスしたときにスローされる「java.lang」パッケージに例外を提供します。これは「ArrayIndexOutOfBoundsException」として知られています。
学習内容:
ArrayIndexOutOfBoundsException
すでに述べたように、指定された長さまたは負のインデックスを超えて配列要素にアクセスしようとすると、コンパイラは「ArrayIndexOutOfBoundsException」をスローします。
ArrayIndexOutOfBoundsExceptionは、「シリアライズ可能な」インターフェイスを実装し、「indexOutOfBoundsException」から派生します。「indexOutOfBoundsException」は、「exception」クラスのサブクラスであるRuntimeExceptionクラスから派生します。これらのクラスはすべて「java.lang」パッケージに属しています。
ArrayIndexOutOfBoundsExceptionは実行時のチェックされていない例外であるため、メソッドから明示的に呼び出す必要はありません。以下は、継承階層とこの例外のコンストラクターを示すArrayIndexOutOfBoundsExceptionのクラス図です。
ArrayIndexOutOfBoundsExceptionのクラス図
前に説明したように、ArrayIndexOutOfBoundsExceptionクラスには、java.lang.exception、java.langの3つのスーパークラスがあります。 runtimeExceptionおよびjava.lang.indexOutOfBoundsException。
次に、JavaでのArrayIndexOutOfBoundsExceptionの例をいくつか示します。
ArrayIndexOutOfBounds例外の例
ArrayIndexOutOfBounds例外がスローされることを示す最初の例を見てみましょう。
class Main { public static void main(String[] args) { //array of subjects. There are 5 elements. String[] subjects = {'Maths','Science','French','Sanskrit', 'English'}; //for loop iterates from 0 to 5 (length of array) for(int i=0;i<=subjects.length;i++) { //when ‘i’ reaches 5, it becomes invalid index and exception will be thrown System.out.print(subjects[i] + ' '); } }
出力:
上記のプログラムでは、5つの要素で構成される配列サブジェクトがあります。ただし、forループでは、反復条件をiとして設定しています。<=subjects.length. Thus for the last iteration, the value of i is 5 which exceeds the array size. Hence, when printing array elements, the iteration i=5, results in ArrayIndexOutOfBoundsException being thrown.
以下に示すのは、負のインデックスにアクセスする別の例です。
class Main { public static void main(String[] args) { //array of integers Integer[] intArray = {10,20,30,40,50}; //index = 0; accessing element is successful System.out.println('First element: ' + intArray[0]); //index = -4; accessing fails. Exception thrown System.out.println('Last element: ' + intArray[-4]); }
出力:
.datファイルを開く方法は?
上記のプログラムでは、整数型の配列を宣言してから、個々のインデックスを使用して要素にアクセスします。最初の式は有効ですが、2番目の式では、インデックス= -4の要素にアクセスしようとしました。したがって、2番目の式は、出力に示されているようにArrayIndexOutOfBoundsExceptionをスローします。
ArrayIndexOutOfBoundsExceptionの回避
ArrayIndexOutOfBoundsExceptionが発生する一般的な原因は、プログラマーが配列インデックスの使用を間違えたことです。
したがって、プログラマーは以下の手法に従って、ArrayIndexOutOfBoundsExceptionの発生を回避できます。
適切な開始インデックスと終了インデックスを使用する
配列は常に1ではなくインデックス0で始まります。同様に、配列の最後の要素には、「arraylength」ではなく「arraylength-1」というインデックスを使用してアクセスできます。プログラマーは、配列制限を使用する際に注意して、ArrayIndexOutOfBoundsExceptionを回避する必要があります。
拡張Forループの使用
拡張されたforループまたはfor-eachループは、配列などの連続するメモリ位置を反復処理し、正当なインデックスにのみアクセスします。したがって、拡張forループを使用する場合、間違ったインデックスや不正なインデックスにアクセスすることを心配する必要はありません。
Enhanced forLoopを使用して配列を反復処理する例。
class Main { public static void main(String[] args) { //array of subjects. There are 5 elements. String[] subjects = {'Maths','Science','French','Sanskrit', 'English'}; System.out.println('') //define enhanced for loop to iterate over array for(String strval:subjects) { //iterates only through valid indices System.out.print(strval + ' '); } } }
出力:
上記のプログラムで拡張forループを使用して、サブジェクトの配列を反復処理しました。このループでは、インデックスを明示的に指定する必要がないことに注意してください。したがって、ループは、配列の最後に到達するまで配列を繰り返し処理します。
したがって、適切なインデックスを使用し、配列の制限を指定するときに注意することで、ArrayOutOfBoundsExceptionを簡単に修正できます。拡張forループを利用して、配列を反復処理することもできます。
配列の例外に関してよくある質問に答えてみましょう。
よくある質問
Q#1)ArrayIndexOutOfBoundsExceptionが発生するのはなぜですか?
回答: ArrayIndexOutOfBoundsExceptionは、存在しない配列インデックスにアクセスしようとすると発生します。インデックスが負であるか、配列の制限を超えています。
Q#2)NegativeArraySizeExceptionとは何ですか?
回答: NegativeArraySizeExceptionは、配列が負のサイズで定義されている場合にスローされるランタイム例外です。
アンドロイドのための最高の音楽ダウンローダー
Q#3)配列の範囲外の例外とは何ですか?
回答: プログラムが負のインデックスまたは指定された配列の範囲外のインデックスを指定して配列要素にアクセスしようとすると、配列の範囲外例外が発生します。
Q#4)JavaでNullPointerExceptionをスローできますか?
回答: はい、JavaでNullPointerExceptionをスローできます。そうしないと、JVMが自動的にスローします。
Q#5)NullPointerExceptionはチェックされていますか、それともチェックされていませんか?
回答: NullPointerExceptionはチェックされておらず、RuntimeExceptionを拡張します。プログラマーがcatchブロックを使用して処理する必要はありません。
結論
このチュートリアルでは、JavaでのArrayIndexOutOfBoundsExceptionの詳細について説明しました。この例外は通常、プログラムで負のインデックスを使用して、または指定された配列の長さより大きいインデックスを指定するなどの範囲外のインデックスを使用して配列要素にアクセスしようとしたときにスローされます。
この例外は、配列へのアクセス中にインデックスを処理するか、設計上正当なインデックスのみにアクセスする拡張forループを使用することで回避できます。
以降のチュートリアルでは、他のアレイトピックに進みます。