예외란 무엇입니까?
예외라는 용어는 "예외적인 사건"이라는 문구의 줄임말입니다.
정의 : 예외는 프로그램 실행 중에 발생하여 프로그램 명령의 정상적인 흐름을 방해하는 이벤트입니다.
메서드 내에서 오류가 발생하면 메서드는 개체를 만들어 런타임 시스템에 전달합니다. 예외 개체라고 하는 개체에는 오류 유형 및 오류 발생 시 프로그램 상태를 포함하여 오류에 대한 정보가 들어 있습니다. 예외 개체를 만들어 런타임 시스템에 전달하는 것을 예외 발생이라고 합니다.
메서드가 예외를 throw한 후 런타임 시스템은 이를 처리할 무언가를 찾으려고 시도합니다. 예외를 처리할 수 있는 "무언가" 집합은 오류가 발생한 메서드에 도달하기 위해 호출된 순서가 지정된 메서드 목록입니다. 메서드 목록을 호출 스택이라고 합니다(다음 그림 참조).
호출 스택
런타임 시스템은 예외를 처리할 수 있는 코드 블록이 포함된 메서드에 대한 호출 스택을 검색합니다. 이 코드 블록을 예외 처리기라고 합니다. 검색은 오류가 발생한 메서드에서 시작하여 메서드가 호출된 역순으로 호출 스택을 통해 진행됩니다. 적절한 핸들러가 발견되면 런타임 시스템은 핸들러에 예외를 전달합니다. 던져진 예외 객체의 유형이 핸들러가 처리할 수 있는 유형과 일치하는 경우 예외 핸들러가 적절한 것으로 간주됩니다.
선택된 예외 핸들러는 예외를 포착한다고 합니다. 다음 그림과 같이 런타임 시스템이 적절한 예외 처리기를 찾지 않고 호출 스택의 모든 메서드를 철저하게 검색하면 런타임 시스템(결과적으로 프로그램)이 종료됩니다.
예외 처리기에 대한 호출 스택 검색
예외 처리기에 대한 호출 스택 검색
예외를 사용하여 오류를 관리하면 기존의 오류 관리 기술에 비해 몇 가지 이점이 있습니다. 예외의 이점 섹션에서 자세히 알아볼 수 있습니다.
캐치 또는 지정 요구 사항
유효한 Java 프로그래밍 언어 코드는 Catch or Specify Requirement 를 준수해야 합니다 . 즉, 특정 예외를 throw할 수 있는 코드는 다음 중 하나로 묶어야 합니다.
try예외를 catch하는 문입니다 . 는 try예외 포착 및 처리에 설명된 대로 예외에 대한 핸들러를 제공해야 합니다.
예외를 throw할 수 있음을 지정하는 메서드입니다. 메서드는 throws메서드에서 발생하는 예외 지정에 설명된 대로 예외를 나열하는 절을 제공해야 합니다.
Catch or Specify Requirement를 따르지 않는 코드는 컴파일되지 않습니다.
모든 예외에 Catch or Specify Requirement가 적용되는 것은 아닙니다. 그 이유를 이해하려면 예외의 세 가지 기본 범주를 살펴봐야 합니다. 그 중 하나만 요구 사항에 적용됩니다.
세 가지 종류의 예외
첫 번째 종류의 예외는 확인된 예외 입니다 . 이는 잘 작성된 애플리케이션이 예상하고 복구해야 하는 예외적인 조건입니다. 예를 들어 애플리케이션이 사용자에게 입력 파일 이름을 입력하라는 메시지를 표시한 다음 이름을 의 생성자에 전달하여 파일을 연다고 가정합니다 java.io.FileReader. 일반적으로 사용자는 기존의 읽을 수 있는 파일 이름을 제공하므로 개체 구성이 FileReader성공하고 응용 프로그램 실행이 정상적으로 진행됩니다. 그러나 때로는 사용자가 존재하지 않는 파일의 이름을 제공하고 생성자가 java.io.FileNotFoundException. 잘 작성된 프로그램은 이 예외를 포착하고 사용자에게 실수를 알리고 수정된 파일 이름을 묻는 메시지를 표시할 수 있습니다.
확인된 예외는 Catch or Specify Requirement의 적용을 받습니다. Error, RuntimeException및 해당 하위 클래스 로 표시된 예외를 제외한 모든 예외는 확인된 예외입니다 .
두 번째 종류의 예외는 오류입니다. 이는 응용 프로그램 외부에 있으며 일반적으로 응용 프로그램이 예상하거나 복구할 수 없는 예외적인 조건입니다. 예를 들어 응용 프로그램이 입력을 위해 파일을 성공적으로 열었지만 하드웨어 또는 시스템 오작동으로 인해 파일을 읽을 수 없다고 가정합니다. 실패한 읽기는 java.io.IOError. 응용 프로그램은 사용자에게 문제를 알리기 위해 이 예외를 포착하도록 선택할 수 있지만 프로그램이 스택 추적을 인쇄하고 종료하는 것도 이치에 맞을 수 있습니다.
오류는 Catch or Specify Requirement의 대상이 아닙니다. 오류는 및 해당 하위 클래스로 표시된 예외입니다 Error.
세 번째 종류의 예외는 런타임 예외입니다. 이는 응용 프로그램 내부에 있으며 일반적으로 응용 프로그램이 예상하거나 복구할 수 없는 예외적인 조건입니다. 이는 일반적으로 논리 오류 또는 API의 부적절한 사용과 같은 프로그래밍 버그를 나타냅니다. 예를 들어 파일 이름을 FileReader. 논리 오류로 인해 a가 null생성자에게 전달되면 생성자는 NullPointerException. 애플리케이션은 이 예외를 포착할 수 있지만 예외를 발생시킨 버그를 제거하는 것이 더 합리적일 수 있습니다.
런타임 예외는 Catch or Specify Requirement의 대상이 아닙니다. 런타임 예외는 RuntimeException및 해당 하위 클래스로 표시된 예외입니다.
오류 및 런타임 예외는 총체적으로 확인 되지 않은 예외 라고 합니다 .
※ 쿠팡 파트너스 활동을 통해 일정액의 수수료를 제공 받을 수 있습니다
'∮explotación≒ 개발' 카테고리의 다른 글
JavaScript 메모리 관리 (0) | 2023.04.17 |
---|---|
javascript Array.prototype.indexOf() (0) | 2023.04.12 |
java 주석 (0) | 2023.03.15 |
java Lambda Expressions (0) | 2023.03.08 |
java Introducing Generics (0) | 2023.03.08 |
댓글