Java에서 "오류: 보고되지 않은 예외" 수수께끼 공개
암호적인 "오류: 보고되지 않은 예외 ; 발생 잡힐 것인가 아니면 던져질 것이라고 선언할 것인가?" 메시지가 뜬다? 걱정하지 마세요. 이 컴파일 오류를 이해하면 Java 개념이 밝혀지고 이를 해결하는 데 도움이 됩니다.
오류 메시지 풀기:
오류는 코드에서 예외를 확인하여 XXX라는 이름을 갖고 이를 처리하지 못했습니다.
오류의 개념:
Java는 예외를 두 가지 유형으로 분류합니다.
-
확인된 예외: RuntimeException 및 해당 하위 클래스를 제외하고 java.lang.Throwable 및 Exception에서 파생됩니다. 예외는 둘러싸는 메서드나 생성자 내에서 처리되어야 합니다.
-
검사되지 않은 예외: Error 및 해당 하위 클래스와 RuntimeException 및 해당 하위 클래스로 구성되며, 검사되지 않은 예외는 명시적으로 처리할 필요가 없습니다.
해결 중 문제:
오류를 해결하려면 다음 중 하나를 수행하여 코드에서 확인된 예외를 처리해야 합니다.
-
예외 포착 및 처리: 포함 코드 샘플에 설명된 대로 try ... catch 블록 내에서 예외를 트리거하는 문 아래:
try {
// Code that may throw the checked exception
if (someFlag) {
throw new IOException("cannot read something");
}
// Subsequent code
} catch (IOException ex) {
// Handle the exception gracefully
}
로그인 후 복사
-
외곽 메서드나 생성자가 예외를 발생시킨다고 선언: 메서드나 생성자 선언에 throws XXX 절을 추가하면 메소드나 생성자의 호출자에 대한 예외 처리 책임. 다음은 예입니다.
public void doThings() throws IOException {
// Code that may throw an IOException
if (someFlag) {
throw new IOException("cannot read something");
}
// Subsequent code
}
로그인 후 복사
올바른 선택:
올바른 접근 방식은 컨텍스트와 원하는 예외 처리 방식에 따라 다릅니다. 암호. 처리 시 심각도 수준과 예외 복구 능력을 고려하세요.
특별 고려 사항:
-
정적 초기화: 정적 초기화 프로그램에서 확인된 예외를 처리하려면 구문 제한으로 인해 신중하게 처리해야 합니다. 대신 정적 블록 사용을 고려해 보세요.
-
정적 블록: 둘러싸는 컨텍스트가 없기 때문에 확인된 예외는 정적 블록 내에서 포착되어야 합니다.
-
람다: Lambda는 사용하는 함수 인터페이스로 인해 확인되지 않은 예외를 발생시킬 수 없습니다. 람다 자체 내에서 예외를 처리합니다.
-
여러 예외: 동일한 이름에도 불구하고 정규화된 예외 이름이 다른 경우 이러한 예외는 서로 다릅니다. 개별적으로 처리하세요.
추가 리소스:
-
Oracle Java 튜토리얼:
- [catch 또는 지정 요구 사항](https://docs.oracle.com/javase/tutorial/essential/Exceptions/catchExceptions.html#:~:text=catch 또는 지정 요구 사항)
- [잡아서 다루기 예외](https://docs.oracle.com/javase/tutorial/essential/Exceptions/handling.html)
- [메서드에서 발생한 예외 지정](https://docs.oracle.com /javase/tutorial/essential/Exceptions/throwing.html)
위 내용은 Java에서 '오류: 보고되지 않은 예외; 포착되거나 발생하도록 선언해야 합니다'라는 메시지가 나타나는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!