Java의 체크된 예외와 체크되지 않은 예외
이 튜토리얼은 Java에서 체크된 예외와 체크되지 않은 예외가 무엇인지 소개합니다.
Java에서 예외는 코드 실행 중에 발생하여 비정상적으로 실행을 종료하는 상황입니다. 이 예외는 컴파일 타임이나 런타임에 발생할 수 있습니다. Java는 예외를 크게 두 가지 유형(선택됨 및 선택되지 않음)으로 분류합니다. 컴파일 타임에 컴파일러가 검사하는 예외를 검사된 예외라고 합니다. 한편 런타임에 확인되는 예외를 확인되지 않은 예외라고 합니다.
예외를 처리하기 위해 Java는 NullPointerException
, ArrayIndexOutofBoundsException
, IOException
등과 같은 각 예외에 대한 클래스를 제공합니다. Exception
클래스는 모든 예외 클래스의 맨 위에 있으며 Exception
의 하위 클래스인 모든 것 RuntimeException
및 해당 하위 클래스를 제외하고는 확인된 예외입니다.
ArithmeticException
, NullPointerException
, ArrayIndexOutOfBoundsException
과 같이 RuntimeException
을 상속하는 예외 클래스를 확인되지 않은 예외라고 합니다. 이들은 런타임에 확인됩니다.
Java에서 확인된 예외
먼저 예외가 무엇이며 코드 실행에 어떤 영향을 미치는지 이해합시다. 이 예제에서 우리는 파일에 데이터를 쓰고 있으며 이 코드는 FileNotFoundException
, IOException
등과 같은 예외가 발생하기 쉽습니다. 우리는 catch 핸들러를 제공하지 않았으며 이들은 체크된 예외이므로 Java 컴파일러는 코드를 컴파일하지 않고 컴파일 타임에 예외를 throw합니다. 아래의 예를 참조하십시오.
import java.io.FileOutputStream;
public class SimpleTesting {
public static void main(String[] args) {
FileOutputStream fout =
new FileOutputStream("/home/root/eclipse-workspace/java-project/myfile.txt");
fout.write(1256);
fout.close();
System.out.println("Data written successfully");
}
}
출력:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Unhandled exception type FileNotFoundException
Unhandled exception type IOException
Unhandled exception type IOException
at SimpleTesting.main(SimpleTesting.java:8)
코드의 비정상적인 종료를 방지하려면 코드에 catch 핸들러를 제공해야 합니다. 아래는 위와 같은 코드이지만 중간에 코드가 종료되지 않고 잘 실행되도록 catch 핸들러가 있습니다. 아래의 예를 참조하십시오.
import java.io.FileOutputStream;
public class SimpleTesting {
public static void main(String[] args) {
try {
FileOutputStream fout =
new FileOutputStream("/home/irfan/eclipse-workspace/ddddd/myfile.txt");
fout.write(1256);
fout.close();
System.out.println("Data written successfully");
} catch (Exception e) {
System.out.println(e);
}
}
}
출력:
Data written successfully
Java에서 확인되지 않은 예외
아래 코드는 확인되지 않은 예외인 ArrayIndexOutOfBoundsException
을 발생시킵니다. 이 코드는 성공적으로 컴파일되지만 배열 범위를 벗어난 요소에 액세스할 때 실행되지 않습니다. 따라서 코드에서 런타임 예외가 발생합니다. 아래의 예를 참조하십시오.
public class SimpleTesting {
public static void main(String[] args) {
int[] arr = {3, 5, 4, 2, 3};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
System.out.println(arr[23]);
}
}
출력:
3
5
4
2
3
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 23 out of bounds for length 5
at SimpleTesting.main(SimpleTesting.java:9)