IndexOutOfBounds

IndexOutOfBounds, ArrayIndexOutOfBounds, StringIndexOutOfBounds 모두 범위를 벗어났을 때 발생합니다.

ArrayList

소스 1. ArrayList의 IndexOutOfBounds

a에는 총 n개의 정수를 넣었고, a.get(0), a.get(1), ..., a.get(n-1)만 사용할 수 있습니다. 9번 줄의 a.get(n)에서 java.lang.IndexOutOfBoundsException가 발생합니다. 다음은 소스 1의 런타임 에러 메시지입니다.

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 10, Size: 10
	at java.util.ArrayList.rangeCheck(ArrayList.java:657)
	at java.util.ArrayList.get(ArrayList.java:433)
	at Main.main(Main.java:9)

ArrayList에서 음수 인덱스에 접근하는 경우에는 java.lang.ArrayIndexOutOfBoundsException이 발생합니다.

소스 2. ArrayList의 ArrayIndexOutOfBounds

다음은 소스 2의 런타임 에러 메시지입니다.

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
	at java.util.ArrayList.elementData(ArrayList.java:422)
	at java.util.ArrayList.get(ArrayList.java:435)
	at Main.main(Main.java:9)

배열

배열도 ArrayList와 비슷하지만, 범위를 벗어나는 모든 경우에 java.lang.ArrayIndexOutOfBoundsException가 발생합니다.

소스 3. 배열의 ArrayIndexOutOfBounds

a의 크기는 10이기 때문에, a[100]은 범위를 벗어나 런타임 에러가 발생합니다.

다음은 소스 3의 런타임 에러 메시지입니다.

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 100
	at Main.main(Main.java:9)

문자열

배열과 마찬가지로 범위를 벗어나는 모든 경우에 java.lang.StringIndexOutOfBoundsException가 발생합니다.

소스 4. 문자열의 StringIndexOutOfBounds

s의 길이는 8이기 때문에, s.charAt(8)은 범위를 벗어납니다. 따라서, i가 8이 되는 순간 런타임 에러가 발생합니다. 다음은 소스 4의 런타임 에러 메시지입니다.

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 8
	at java.lang.String.charAt(String.java:658)
	at Main.main(Main.java:6)