Java의 예외 처리 [예제 포함]
게시 됨: 2020-11-12예외는 프로그래머가 결코 원하지 않지만 여러 번 처리해야 하는 프로그램의 원치 않는 예기치 않은 이벤트입니다. 긍정적인 측면은 'Java에서의 예외 처리' 라는 개념을 통해 이러한 바람직하지 않은 이벤트를 완화하기 위해 객체 지향 언어인 Java를 사용할 수 있다는 것입니다 . 예외를 복구하지는 않지만 이를 처리하는 대체 방법을 제공합니다.
잘못된 데이터 입력, 하드웨어 오류, 연결 실패, 서버 다운 등 예외가 발생하는 데는 여러 가지 이유가 있을 수 있습니다. 따라서 예외 처리는 정상임을 보장하는 데 도움이 되기 때문에 Java 학습 과정에서 항상 중요합니다 예상치 못한 사건이 발생했을 때 프로그램의 흐름. 예외를 무시하면 전체 소프트웨어가 충돌하고 데이터가 손실될 수 있습니다.
이제 예외 및 예외 처리에 대한 아이디어를 얻었으므로 자세히 살펴보고 Java가 예외 처리에 어떻게 도움이 되는지 이해하겠습니다.
읽기: 예외 처리 인터뷰 질문
목차
예외 처리 란 무엇입니까 ?
개발자는 런타임 중에 코드 조각이 던질 수 있는 예외를 예측할 수 있습니다. 많은 학습자들이 모호하게 느끼는 가장 중요한 것 중 하나는 모든 예외가 컴파일 시간이 아니라 런타임 중에 발생한다는 것입니다. Java는 런타임 중에만 예외를 처리할 수 있습니다. 예외 처리기 블록을 생성하기 위해 자바 프로그램에서 사용되는 특정 키워드가 있습니다.
java.lang.Exception 은 모든 예외 클래스의 상위 클래스입니다. Exception 클래스는 Object 클래스 의 하위 클래스인 내장 Throwable 클래스의 하위 클래스입니다. 예외 외에도 Throwable에는 오류와 예외의 주요 차이점인 Java 프로그램에서 처리할 수 없는 프로그램 실행 중 비정상적인 상태인 Error라는 또 다른 클래스도 있습니다.

위의 그림과 같이 Java에는 크게 두 가지 범주의 예외가 있습니다. 다음 섹션에서는 Java의 예외 유형에 대해 자세히 살펴보겠습니다.
자바 예외
예외의 근본 원인은 프로그래머 또는 어떤 이유로 인해 실패한 물리적 리소스에 의해 발생하는 것입니다. 이를 기반으로 Java의 예외에는 주로 다음과 같은 두 가지 범주가 있습니다.
- 확인된 예외
- 확인되지 않은 예외
1. 체크된 예외
확인된 예외는 '컴파일 타임 예외'로 알려져 있는데, 이는 컴파일러가 컴파일하는 동안 예외가 프로그래머에 의해 처리되는지 모니터링하기 위해 확인되기 때문입니다. 그런 다음 시스템은 컴파일 오류를 표시합니다.
이러한 예외의 몇 가지 예는 IOException , 읽기: 초보자를 위한 Java 프로젝트 아이디어
2. 체크되지 않은 예외
확인되지 않은 예외는 프로그램 런타임 중에 발생하므로 '런타임 예외'라고 합니다. 확인되지 않은 예외는 일반적으로 컴파일 중에 무시되며 확인되지 않습니다.
이러한 예외의 예로는 논리적 오류와 같은 프로그램의 버그 또는 프로그래머가 제어할 수 없고 시스템 관리자가 수정해야 하는 잘못된 API 사용이 있습니다.
확인된 예외와 확인되지 않은 예외
차별화 포인트 | 확인된 예외 확인되지 않은 예외 취급 시간 | Checked Exception은 컴파일 시 확인 및 처리됩니다. | Unchecked 예외는 컴파일 시 확인되지 않습니다. |
예외 식별 | 메서드가 확인된 예외를 throw하면 프로그램에서 컴파일 오류가 발생합니다. | 컴파일러가 예외를 확인할 수 없으므로 프로그램이 제대로 컴파일됩니다. | |
계승 | RuntimeException 클래스를 상속하지 않습니다. | RuntimeException 클래스의 하위 클래스입니다. | |
개발자의 역할 | 개발자가 처리할 수 있습니다. | 개발자가 처리할 수 없습니다. |
예외를 이해하는 것은 예외를 처리하기 전의 기본 단계입니다.
Java는 예외 처리에 어떻게 도움이 됩니까?
이제 우리는 Java viz.에 두 가지 유형의 예외가 있음을 알고 있습니다. 메서드가 검사된 예외를 throw하는 경우 프로그램에서 컴파일 오류를 피하기 위해 try-catch 블록 으로 처리 하거나 ' throws' 키워드 를 선언해야 합니다.
확인된 예외의 예:
'Java'라는 파일을 읽어오는 프로그램입니다. 확인된 예외가 throw되는 세 곳이 있습니다.
- FileInputStream: 파일 경로와 이름을 지정하는 데 사용 됩니다 .
- read() 메서드: 파일 내용을 읽으면 IOException 이 발생합니다 .
iii. close() 메서드: 파일 입력 스트림을 닫으면 IOException 이 발생 합니다.
가져오기 java.io.*;
클래스 예 {
공개 정적 무효 메인( 문자열 인수[])
{
FileInputStream fis = null ;
/*생성자 FileInputStream(파일 이름)
* 체크된 예외 FileNotFoundException 던짐 */
fis = 새로운 FileInputStream ( "B:/java.txt" );
정수 k;
/* FileInputStream 클래스의 메소드 read() throws
* 확인된 예외: IOException
*/
동안 (( k = fis.read() ) != – 1 )
{
시스템 . 밖으로 . 인쇄 (( 문자 ) k);
}
/* close() 메서드는 파일 입력 스트림을 닫습니다.
* IOException 발생*/
fis.close();
}
}
위 프로그램의 출력:
스레드 "main" java.lang 에서 예외 가 발견 되었습니다 . 오류 : 해결되지 않은 컴파일 문제:
처리되지 않은 예외 FileNotFoundException 이 발견되었습니다.
처리되지 않은 예외 IOException 이 발견되었습니다.
처리되지 않은 예외 IOException 이 발견되었습니다.
이 컴파일 오류의 원인: 비선언 또는 예외 처리.
필독: 자바 GitHub 프로젝트
예외 처리 방법
다음과 같이 예외를 처리할 수 있는 두 가지 방법이 있습니다.
방법 1: 'throws' 예외 키워드 선언
위의 프로그램에서 세 가지 확인된 예외는 모두 main() 메서드 안에 있습니다. 따라서 컴파일 오류를 방지하는 한 가지 방법은 'throws' 키워드를 사용하여 메서드에서 예외를 선언하는 것입니다. IOException은 FileNotFoundException의 상위 클래스이므로 그것도 다룰 것입니다.
throw 키워드를 사용하여 업데이트된 프로그램:
가져오기 java.io.*;
클래스 예 {
public static void main( String args[]) IOException 발생
{
FileInputStream fis = null ;
fis = 새로운 FileInputStream ( "B:/java.txt" );
정수 k;
동안 (( k = fis.read() ) != – 1 )
{
시스템 . 밖으로 . 인쇄 (( 문자 ) k);
}
fis.close();

}
}
산출:
파일의 내용을 화면에 표시합니다.
방법 2: try-catch 블록을 사용하여 예외를 처리합니다.
이것은 위의 방법에 대한 고급 접근 방식이며 최상의 예외 처리 방법 중 하나입니다 . try-catch 블록을 포함하여 변경된 프로그램 코드는 다음과 같습니다.
가져오기 java.io.*;
클래스 예 {
공개 정적 무효 메인( 문자열 인수[])
{
FileInputStream fis = null ;
시도 {
fis = 새로운 FileInputStream ( "B:/java.txt" );
} 잡기 ( FileNotFoundException fnfe){
시스템 . out .println( "파일이 " +
"지정된 경로에 존재" );
}
정수 k;
시도 {
동안 (( k = fis.read() ) != – 1 )
{
시스템 . 밖으로 . 인쇄 (( 문자 ) k);
}
fis.close();
} 잡기 ( IOException ioe){
시스템 . out .println( "I/O 오류 " +ioe);
}
}
}
산출:
이 코드는 결국 파일 내용을 표시합니다.
확인되지 않은 예외의 예
Unchecked 예외는 컴파일 시 확인되지 않습니다. 프로그램이 선언되거나 처리되지 않고 제대로 실행되는 경우 컴파일 오류가 발생하지 않습니다. 이러한 예외가 발생할 수 있는 상황을 사전에 예측하고 처리하는 것이 개발자의 역할입니다. 모든 Unchecked 예외는 RuntimeException 클래스의 하위 클래스입니다.
클래스 예 {
공개 정적 무효 메인( 문자열 인수[])
{
정수 번호1= 10 ;
정수 num2= 0 ;
/*어떤 숫자를 0으로 나누기
* ArithmeticException이 발생합니다.
*/
정수 res=num1/num2;
시스템 . 출력 .println(res);
}
}
코드는 이 코드를 사용하여 성공적으로 컴파일되지만 런타임 중에 확인되지 않은 예외는 컴파일 타임에 확인되지 않으므로 ArithmeticException 이 발생합니다. 다른 예를 살펴보겠습니다.
클래스 예 {
공개 정적 무효 메인( 문자열 인수[])
{
int arr[] ={ 1 , 2 , 3 , 4 , 5 };
/* 배열에는 5개의 요소가 있지만
* 8번째 요소 값을 표시합니다. 그것은 던질 것이다
* ArrayIndexOutOfBoundsException
*/
시스템 . 출력 .println(arr[ 7 ]);
}
}
이 코드는 ArrayIndexOutOfBoundsException 이 확인되지 않은 예외이므로 성공적으로 컴파일됩니다.
여기에서 Unchecked Exception을 처리하기 위해서는 사용자에게 표시하고 싶은 예외 메시지가 표시되어야 하지만 어레이에는 존재하지 않습니다.
try-catch 블록으로 위의 코드 예외 처리
클래스 예 {
공개 정적 무효 메인( 문자열 인수[]) {
시도 {
int arr[] ={ 1 , 2 , 3 , 4 , 5 };
시스템 . 출력 .println(arr[ 7 ]);
}
catch ( ArrayIndexOutOfBoundsException e){
시스템 . out .println( "지정된 인덱스가 존재하지 않습니다 " +
"배열에서." );
}
}
}
산출:
지정된 인덱스가 배열에 존재 하지 않습니다 .
참고: 다른 예외를 처리하기 위해 try 블록 안에 여러 catch 블록이 있을 수 있습니다.
방법 3 : 'finally' 키워드 사용
예외가 발생하더라도 코드를 실행해야 하는 경우가 있습니다. 여기에서 final 키워드가 사용됩니다. 다음은 'finally' 키워드가 있는 일반적인 코드입니다.
public int getPlayerScore(문자열 플레이어 파일)
FileNotFoundException 발생 {
스캐너 내용 = null;
노력하다 {
내용 = new Scanner( new File(playerFile));
반환 Integer.parseInt(contents.nextLine());
} 드디어 {
if (내용 != null ) {
내용.닫기();
}
}
}
여기서 마지막 블록은 파일을 읽으려고 할 때 Java가 실행되기를 원하는 코드를 나타냅니다.
FileNotFoundException 이 발생 하더라도 Java는 finally 의 내용을 호출합니다 .
아래와 같이 코드를 수정하여 예외를 처리할 수 있습니다 .
공개 int PlayerScore(문자열 플레이어 실행) {
스캐너 내용;
노력하다 {
내용 = new Scanner(new File(playerRuns));
반환 Integer.parseInt(contents.nextLine());
} catch(FileNotFoundException noFile ) {
logger.warn("파일을 찾을 수 없습니다.");
반환 0;
} 마지막으로 {
노력하다 {
if (내용 != null) {
내용.닫기();
}
} 잡기(IOException ioexc) {
logger.error("리더를 닫을 수 없습니다.", ioexc);
}
}

}
결론
이 기사를 통해 우리는 Java에서 오류 및 예외 및 예외 처리 의 기본 사항을 살펴보려고 했습니다 . 이 가이드가 Java가 제공하는 이 고유한 기능에 대한 좋은 아이디어를 제공하고 이제 예외를 처리하고 더 잘 복구할 수 있기를 바랍니다. 결론
Java는 특정 예외부터 일반 예외까지 예외를 처리하는 방법을 제공합니다. 미리 쉽게 예측할 수 없는 예외를 처리되지 않은 예외라고 합니다. 모든 예외를 캡처하면 신속하게 수정할 수 있는 오류의 근본 원인과 코드 품질에 대한 가시성을 개발 팀에 제공합니다.
Java, 전체 스택 개발에 대해 자세히 알아보려면 upGrad & IIIT-B의 전체 스택 소프트웨어 개발 PG 디플로마를 확인하십시오. 전문가를 위해 신중하게 선별되었으며 360도 경력 지원을 보장하고 작업할 라이브 프로젝트를 포함합니다. 과정이 끝나면 Swiggy, IMDB 등과 같은 응용 프로그램을 설계하고 구축할 수 있습니다.
흥미롭게 들리지 않습니까!-