hyeonga_code

Java의 신_Chapter 14_Exception 본문

Java

Java의 신_Chapter 14_Exception

hyeonga 2024. 3. 28. 11:59
반응형

 

2024.03.27

 

- 예외처리_Exception

 

- try-catch

try {
    // 예외가 발생할 수 있는 문장
    // 예외가 발생한 위치 이후의 문장은 실행되지 않는다
} catch (Exception e) {
    // 예외가 발생하는 경우 실행
} finally {
    // 무조건 실행( 생략가능 )
}

 

---- try 블록 내에 선언한 변수는 catch 블록에서 사용할 수 없다.

---- finally 블록은 코트의 중복을 피하기 위해 반드시 필요하다.

---- catch()문의 다중 예외처리가 가능하다.

---- 예외 처리의 순서도 중요하다.

------ 모든 예외의 최상위 클래스는 Exception

------ 먼저 선언된 catch 블록의 예외 클래스가 이후 선언한 catch 블록의 부모 클래스에 속하는 경우 자식 클래스에 속하는 catch 블록은 실행될 일이 없으므로 컴파일이 되지 않는다.

---- 예외와 관련이 있는 catch 블록이 없는 경우 예외가 발생하며 해당 스레드는 종료되므로 마지막 catch 블록은 Exception 클래스로 묶어주는 습관을 들이는 것이 좋다.

 

- 예외의 종류

-- Checked Exception

-- Error

-- Runtime Exception / Unchecked Exception

 

-- 에러_Error

---- 자바 프로그램 밖에서 발생한 예외

---- 에러는 예외가 아니다.

---- 프로세스에 영향을 주어 프로그램이 멈춘다

------ 예외는 현재 스레드에만 영향을 주어 스레드가 종료된다.

 

-- 런타임 예외_Runtime Exception

---- 예외가 발생할 것을 미리 감지하지 못한 경우 발생한다.

---- 컴파일 시에 체크하지 않으므로 Unchecked Exception이라고도 한다.

 

-- 예외와 오류의 공통 조상 클래스는 Object 와 Throwable 클래스다.

더보기
Throwable()

Throwable(String message)
    // 예외 메세지를 넘겨줄 수 있다.
    
Throwable(Throwable cause)
    // 예외의 원인을 넘겨줄 수 있다.
    
Throwable(String message, Throwable cause)

 

-- Throwable 클래스에 선언되어 있고, Exception 클래스에서 Overriding한 메소드

더보기
getMessage()
    // 예외 메세지를 String 형태로 리턴
    // 예외가 출력된 경우 어떤 예외가 발생했는지 확인 시 유용하다.

toString()
    // 예외 메세지를 String 형태로 리턴
    // getMessage() 메소드보다 자세하게 예외 클래스 이름도 같이 리턴한다.
    
printStackTrace()
    // 가장 첫 줄에 예외 메세지를 리턴
    // 예외가 발생한 메소드들의 호출 관계(스텍 트레이스)를 리턴
    // 개발하는 동안에만 사용한다.
    // 시스템에 사용시 로그의 양이 기하급수적으로 늘어날 수 있다.

 

-- throws

---- 예외를 발생시키는 방법

---- 예외를 던지는 경우 try-catch문으로 작성하지 않아도 예외 처리를 할 수 있다.

try {
    if ( 조건 ) {
        throw new Exception( "새로 발생할 예외 이름" );
        // 조건이 true 인 경우 예외 발생
        // 발생한 예외가 catch 블록에 있는 경우 catch 블록을 실행
        // 예외가 catch 블록에 없는 경우 호출한 메소드로 던진다.
    }
} catch (Exception e) {
	// try 문 실행 중 예외 발생 시 실행
}

 

 

public class ThrowClass {
    public void throwsException() throws Exception {
    	if ( 조건 ) {
            throw new Exception( "새로 발생할 예외 이름" );
        }
    }
}

---- 예외를 던지는 경우 try-catch문으로 작성하지 않아도 예외 처리를 할 수 있다.

---- 예외를 던지는 경우 메소드를 호출한 메소드에서 반드시 try-catch문을 작성해야 한다.

---- 예외를 여러 번 던질 수는 있으나 좋은 방법은 아니다.

 

 

-- 예외 커스텀하기

public class MyException extends Exception {
    public MyException(){
    	super();
    }
    
    public MyException(String message) {
    	super(message);
    }
}

public class UseMyException {
    public static void main(String[] args) {
    	UseMyException sample = new UseMyException();
        try {
            if ( 조건 ) {
                throw new MyException( "새로 발생할 예외 이름" );
            }
        } catch (MyException e) {
            e.printStackTrace();
        }
    }
}

 

 

반응형

'Java' 카테고리의 다른 글

Java의 신_Chapter 16_Nested Class  (0) 2024.03.29
Java의 신_Chapter 15_String  (0) 2024.03.29
Java의 신_Chapter 13_Interface, enum  (0) 2024.03.28
Java의 신_Chapter 12_Object  (0) 2024.03.28
Java의 신_Chapter 11_API  (0) 2024.03.28