"Throwable"는 Error 클래스와 Exception 클래스의 부모 클래스입니다. 클래스 "RuntimeException"및 그 서브 클래스, 클래스 "Error"및 그 자손 클래스는 "체크되지 않은 예외"인 반면, "RuntimeException"을 제외한 클래스 "Exception"의 나머지 서브 클래스는 체크 된 예외이다. checked 및 unchecked 예외의 기본적인 차이점은 컴파일러가 확인 된 예외 를 확인하는 반면 컴파일러는 확인 되지 않은 예외를 확인하지 않는다는 것입니다.
비교 차트를 사용하여 체크 된 예외와 확인되지 않은 예외 사이의 다른 차이점에 대해 설명 합니다.
비교 차트
비교의 근거 | 확인 된 예외 | 확인되지 않은 예외 |
---|---|---|
기본 | 컴파일러는 확인 된 예외를 확인합니다. | 컴파일러는 검사되지 않은 예외를 검사하지 않습니다. |
예외 클래스 | "RuntimeException"클래스를 제외하고 "Exception"클래스의 모든 하위 클래스와 "Error"클래스와 그 하위 클래스는 Checked Exception입니다. | "RuntimeException"클래스와 해당 하위 클래스는 "확인되지 않은 예외"입니다. |
손질 | 검사 된 예외를 처리하지 않으면 컴파일러 객체가 처리됩니다. | 검사되지 않은 예외를 처리하지 않더라도 컴파일러는 이의를 제기하지 않습니다. |
편집 | 프로그램 코드에 처리되지 않은 검사 예외가있는 경우 프로그램이 컴파일되지 않습니다. | 프로그램 코드에 처리되지 않은 검사되지 않은 예외가 있어도 프로그램이 성공적으로 컴파일됩니다. |
확인 예외의 정의
확인 된 예외는 프로그램의 원활한 실행을 위해 컴파일러에서 검사되는 예외입니다. 컴파일러는 프로그램이 확인 된 예외를 처리 할 수 있는지 여부를 확인합니다. 코드가 예외를 처리 할 수 없으면 컴파일 오류가 발생합니다. RuntimeException 클래스를 제외하고 "Exception"클래스의 모든 서브 클래스는 검사 된 예외입니다.
확인 된 예외를 예제로 살펴 보겠습니다.
import java.io. *; 클래스 예제 {public static void main (String args []) {FileInputStream fis = null; fis = 새로운 FileInputStream ( "B : /myfile.txt"); //이 생성자 인 FileInputStream (File filename)은 검사 된 예외 인 FileNotFoundException을 발생시킵니다. int k; while ((k = fis.read ())! = -1) {// FileInputStream 클래스의 read () 메소드는 확인 된 예외 인 IOException을 던집니다. System.out.print ((char) k); } fis.close (); // close () 메소드는 파일 입력 스트림을 닫아 IOException을 던집니다. }}
위의 코드에서 우리는 파일 내용을 열고 읽고 표시하려고합니다. 파일이 존재하지 않으면 FileNotFoundException이 발생합니다. 이는 확인 된 예외입니다. 검사 된 예외가 처리되지 않으면 컴파일러에서 프로그램을 부드럽게 컴파일 할 수 없습니다. 컴파일 시간 오류가 표시됩니다. 따라서 컴파일이 원활하게 진행되도록하려면 체크 된 예외를 포착하거나 throw해야한다고 선언해야합니다.
확인되지 않은 예외의 정의
검사되지 않은 예외는 컴파일러에서 검사하지 않는 예외입니다. 예외가 코드에 의해 처리되지 않더라도 컴파일러는 프로그램을 성공적으로 컴파일합니다. "Error"클래스와 그 아이 클래스, "Runtime"클래스 및 그 서브 클래스는 체크되지 않는 예외입니다.
확인되지 않은 예외의 예를 보도록하겠습니다.
클래스 예제 {public static void main (String args []) {int arr [] = {1, 2, 3, 4, 5}; System.out.println (arr [7]); // ArrayIndexOutOfBoundsException. }}
위 코드에서 ArrayIndexOutOfBoundsException이 있음을 알 수 있습니다. 존재하지 않는 요소에 액세스하려고 시도하고 있습니다. 이것은 검사되지 않은 예외이므로 컴파일 시간 오류가 발생하지 않으며 오류없이 파일이 컴파일됩니다. 그러나 예외가 처리 될 때까지 프로그램이 실행되지 않습니다. 따라서 원활한 실행을 위해 예외를 포착하거나 throw해야한다고 선언해야합니다.
확인 된 예외와 확인되지 않은 예외의 주요 차이점
- 확인 된 예외는 컴파일러에 대한 지식이지만, 검사되지 않은 예외는 컴파일러에 대한 지식이 아닙니다.
- RuntimeException 및 Error 클래스를 제외하고 모든 클래스는 예외로 검사됩니다. 반면 RuntimeException 및 Error 클래스는 검사되지 않은 예외입니다.
- 확인 된 예외가 코드에 의해 처리되지 않으면 컴파일러 객체가 처리됩니다. 반면에 우리가 코드에서 체크되지 않은 예외를 처리하지 않으면 컴파일러는 반대하지 않습니다.
- 코드에서 검사 된 예외가 발생하면 코드는 컴파일되지 않지만 검사되지 않은 예외가 코드에서 처리되지 않더라도 컴파일러는 여전히 코드를 컴파일합니다.
노트 :
런타임 동안 체크되거나 체크되지 않은 예외가 모두 강제적으로 발생합니다. 그것들은 컴파일 시간 동안 컴파일러에 의해서만 체크되거나 체크되지 않는다.
결론:
프로그램을 원활하게 실행하려면 확인 된 예외와 확인되지 않은 예외를 모두 처리해야합니다.