how handle arrayindexoutofboundsexception java
이 튜토리얼은 Java 배열에 의해 발생하는 중요한 예외에 대한 자세한 설명을 제공합니다. 예 : 간단한 예제와 함께 ArrayIndexOutOfBoundsException :
이전 튜토리얼에서 배열에 대한 모든 것을 배웠습니다. 배열은 본질적으로 정적이며 크기 또는 크기는 선언 시점에 결정됩니다. 또한이 크기 또는 배열에 대해 선언 된 요소의 수는 고정되어 있으며 0부터 번호가 매겨집니다.
때로는 프로그램 논리가 프로그램이 존재하지 않는 인덱스에서 요소에 액세스하려고 시도하는 것과 같습니다. 예를 들면 프로그램의 결함으로 인해 프로그램이 11일10 개 요소의 배열에있는 요소입니다. 이로 인해 비정상적인 상태가 발생합니다.
Java는 존재하지 않는 배열 인덱스에 액세스 할 때 발생하는 'java.lang'패키지에 예외를 제공합니다. 이를 'ArrayIndexOutOfBoundsException'이라고합니다.
학습 내용 :
ArrayIndexOutOfBoundsException
이미 언급했듯이 지정된 길이 또는 음수 인덱스를 초과하는 배열 요소에 액세스하려고하면 컴파일러에서 'ArrayIndexOutOfBoundsException'이 발생합니다.
ArrayIndexOutOfBoundsException은 '직렬화 가능'인터페이스를 구현하고 '예외'클래스의 하위 클래스 인 RuntimeException 클래스에서 파생되는 'indexOutOfBoundsException'에서 파생됩니다. 이러한 모든 클래스는‘java.lang’패키지에 속합니다.
ArrayIndexOutOfBoundsException은 런타임이며 확인되지 않은 예외이므로 메서드에서 명시 적으로 호출 할 필요가 없습니다. 다음은이 예외에 대한 생성자뿐만 아니라 상속 계층 구조를 보여주는 ArrayIndexOutOfBoundsException의 클래스 다이어그램입니다.
ArrayIndexOutOfBoundsException의 클래스 다이어그램
앞에서 설명한대로 ArrayIndexOutOfBoundsException 클래스에는 세 개의 수퍼 클래스 즉, java.lang.exception, java.lang이 있습니다. runtimeException 및 java.lang.indexOutOfBoundsException.
다음으로 Java에서 ArrayIndexOutOfBoundsException의 몇 가지 예를 살펴 보겠습니다.
ArrayIndexOutOfBounds 예외의 예
throw되는 ArrayIndexOutOfBounds Exception을 보여주는 첫 번째 예제를 살펴 보겠습니다.
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) + ' '); } }
산출:
고급 SQL 인터뷰 질문 및 답변 pdf
위의 프로그램에는 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)); }
산출:
위의 프로그램에서 우리는 정수형 배열을 선언 한 다음 개별 인덱스를 사용하여 요소에 액세스합니다. 첫 번째 표현식은 유효하지만 두 번째 표현식에서는 index = -4에있는 요소에 액세스하려고했습니다. 따라서 두 번째 표현식은 출력에 표시된대로 ArrayIndexOutOfBoundsException을 발생시킵니다.
ArrayIndexOutOfBoundsException 방지
ArrayIndexOutOfBoundsException이 발생하는 일반적인 원인은 프로그래머가 배열 인덱스를 사용하는 데 실수를하기 때문입니다.
따라서 프로그래머는 ArrayIndexOutOfBoundsException 발생을 방지하기 위해 아래 기술을 따를 수 있습니다.
적절한 시작 및 종료 인덱스 사용
배열은 항상 1이 아닌 인덱스 0으로 시작합니다. 마찬가지로 배열의 마지막 요소는 'arraylength'가 아닌 'arraylength-1'인덱스를 사용하여 액세스 할 수 있습니다. 프로그래머는 배열 제한을 사용하는 동안주의해야하며 따라서 ArrayIndexOutOfBoundsException을 피해야합니다.
향상된 For 루프 사용
향상된 for 루프 또는 for-each 루프는 배열과 같은 연속적인 메모리 위치를 반복하고 유효한 인덱스에만 액세스합니다. 따라서 향상된 for 루프를 사용할 때 잘못된 인덱스 나 잘못된 인덱스에 액세스하는 것에 대해 걱정할 필요가 없습니다.
Enhanced for Loop를 사용하여 배열을 반복하는 예.
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은 배열이 음수 크기로 정의 된 경우 throw되는 런타임 예외입니다.
Q # 3) 배열 외부 예외 란 무엇입니까?
대답: 프로그램이 음수 인덱스 또는 지정된 배열 범위에없는 인덱스를 지정하여 배열 요소에 액세스하려고하면 배열 범위를 벗어난 예외가 발생합니다.
Q # 4) Java에서 NullPointerException을 throw 할 수 있습니까?
대답: 예, Java에서 NullPointerException을 발생시킬 수 있습니다. 그렇지 않으면 JVM이 대신 처리합니다.
Q # 5) NullPointerException이 선택되거나 선택 해제되어 있습니까?
대답: NullPointerException은 선택 취소되고 RuntimeException을 확장합니다. 프로그래머가 catch 블록을 사용하여 처리하도록 강요하지는 않습니다.
결론
이 튜토리얼에서는 Java의 ArrayIndexOutOfBoundsException에 대한 세부 사항을 논의했습니다. 이 예외는 일반적으로 프로그램에서 음의 인덱스를 사용하거나 지정된 배열 길이보다 큰 인덱스를 지정하는 것과 같이 범위를 벗어난 인덱스를 사용하여 배열 요소에 액세스하려고 할 때 발생합니다.
이 예외는 배열에 액세스하는 동안 인덱스를 관리하거나 설계 상 법적 인덱스에만 액세스하는 향상된 for 루프를 사용하여 방지 할 수 있습니다.
다음 자습서에서 다른 배열 항목으로 이동합니다.