java 핵심-예외처리

이호영·2022년 1월 17일
0

java

목록 보기
6/6

오류의 종류는 컴파일 오류와 실행 오류 두가지로 나뉜다.
컴파일 오류
코드 작성 중 발생하는 문법적 오류
실행 오류
예기치 못한 의도하지 않은 동작을 하거나 프로그램이 중지되는 오류
비정상적으로 종료되어 시스템 장애가 발생할수 있다.
이러한 오류를 회피 또는 예방하기위해 예외처리를 수행한다.
오류가 발생한 경유 로그를 남겨 분석하여 원인을 파악하는것이 중요
모든 예외 클래스의 최상위 클래스는 Exeption 클래스이며 자바에서는 다양한 예외처리 클래스를 제공한다.
오류 발생 이유에 대한 메시지
1. Arithmetic Exception :정수를 0 으로 나눈 경우 발생
2. NullPointerException : 초기화 되지 않은 Object를 사용하는 경우
3. ArrayIndexOutOfBoundsException :배열의 크기를 넘어선 위치를 참조하려는 경우
4. FileNotFoundException :참조하는 파일이 지정된 위치에 존재하지 않는 경우
5. ClassNotFoundException : 클래스가 로드되지 않는 경우
예외처리의 문법은 기본적으로 try-catch문을 사용한다.

try{
오류가 발생 할수있는 코드부분
}catch(처리할 예외타입 e{
try블록 안에서 예외가 발생한 경우 예외를 처리하는 부분}

기본적인 문법이다. 예제코드로 실제로 사용해보자

public class eexam {
    public static void main(String[] args) {
        int[] a={1,2,3,4,5};
        try {
            System.out.println(a[5]);
        }catch(Exception e){
            System.out.println(e.getMessage());
            System.out.println("오류발생");
        }
    }
}

위 코드의 실행 결과는 "오류발생"으로 출력된다.
getMessage를 사용하여 내용을 문자열로 출력하였다.
이외에 다른메소드로는
1.void printStackTrace()
2.String toString()
어느정도 try catch를 이해했으면 finally로 넘어가자
finally에서는 파일을 닫거나 네트웍을 닫는 리소스 헤제를 구현한다.
try가 수행되면 finally는 무조건 수행된다.
만약 예외 처리가 많은 경우 각각에서 리소스를 해제하지 않고 finally블록에서 해제하도록 구현한다.

public class eexam {
    public static void main(String[] args) {
        int[] a={1,2,3,4,5};
        try {
            System.out.println(a[5]);
        }catch(Exception e){
            System.out.println(e.getMessage());
            System.out.println("오류발생");
        }finally {
            System.out.println("여기는 아묻따 실행");
        }
    }
}

위 코드를 실행하면 출력결과는 오류발생 여기는 아묻따 실행
이렇게 두문자열이 한번에 출력되는 것을 볼수있다.

세번째 try with resources
리소스를 사용하는경우 자동으로 해제 되도록 한다.
주의할점은 리소스를 try내부에서 선언해야 하고 리소스 클래스가 AutoCloseable 인터페이스를 구현해야 한다.
명시적으로 close()하지 않아도 try에서 정상적이든 예외든 모두 자동으로 해제시킨다.

만약 예외가 여러개일경우는 어떻게 해야하나 방법은 2가지이다.
1. 한번에 묶어서 하나의 방법으로 처리하는것
2. 각각 예외처리를 진행하는것

여기서 궁금한것이 생길수도있다. java에서 Exeption을 제공하지만
내부 구조가 궁금할수도? 저는 궁금해서 확인 해봤어요.
사진처럼 클래스를 상속받아 구현된다.

0개의 댓글