hyeonga_code
Java의 신_Chapter 14_Exception 본문
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 |