https://github.com/whiteship/live-study/issues/9
목표
자바의 예외 처리에 대해 학습하세요.
학습할 것 (필수)
- 자바에서 예외 처리 방법 (try, catch, throw, throws, finally)
- 자바가 제공하는 예외 계층 구조
- Exception과 Error의 차이는?
- RuntimeException과 RE가 아닌 것의 차이는?
- 커스텀한 예외 만드는 방법
자바에서 예외 처리 방법 (try, catch, throw, throws, finally)
public class MyClass {
public static void main(String[] args) {
try {
// 예외를 발생시킬 수 있는 코드
int[] myArray = {1, 2, 3};
System.out.println(myArray[3]);
} catch (Exception e) {
// 오류 발생 시 실행할 코드
System.err.println(e.getMessage());
} finally {
// try 블록 종료 시 항상 실행되는 코드
System.out.println("try catch block end");
}
}
}
Index 3 out of bounds for length 3
try catch block end
Process finished with exit code 0
public class MyClass {
private static void checkAge(int age)
throws ArithmeticException {
if (age < 18) {
// throw를 사용해 특정 Exception으로 예외를 던진다.
throw new ArithmeticException("Access denied");
} else {
System.out.println("Access granted");
}
}
public static void main(String[] args) {
checkAge(20);
}
}
Exception in thread "main"
java.lang.ArithmeticException: Access denied
at com.company.MyClass.checkAge(MyClass.java:7)
at com.company.MyClass.main(MyClass.java:13)
출처: https://www.w3schools.com/java/java_try_catch.asp
throw / throws 비교
- 메소드 안에서 예외를 사용 / 메소드의 블럭에서 예외를 받아 처리
- 1개의 예외 선언 가능 / 여러개의 예외 선언 가능
https://www.w3schools.com/java/ref_keyword_throws.asp
https://docs.oracle.com/javase/tutorial/essential/exceptions/try.html
https://docs.oracle.com/javase/tutorial/essential/exceptions/catch.html
https://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html
자바가 제공하는 예외 계층 구조
출처: https://www.manishsanger.com/java-exception-hierarchy/
Throwable
- 예외처리의 최상위 클래스
- Serializable 인터페이스의 구현
- throwable에는 생성 당시 스레드의 실행 스택 스냅샷이 포함
https://www.geeksforgeeks.org/throwable-class-in-java-with-examples/
Error
- 예상치 못한 심각한 문제
- 처리 기술로 복구할 수 없는 조건 (비정상적인 프로그램 종료의 원인)
- 런타임에 발생 (ex 메모리 부족, 시스템 충돌 오류)
Exception
- 포착하려는 조건의 문제
- 런타임시 발생하는 조건으로 프로그램이 종료 될 수 있지만 try catch, throw 키워드로 복구 가능
- checked / unchecked 예외 두 가지 범주
https://docs.oracle.com/javase/tutorial/essential/exceptions/throwing.html
Exception과 Error의 차이는?
출처: https://www.geeksforgeeks.org/errors-v-s-exceptions-in-java/
RuntimeException과 RE가 아닌 것의 차이는?
Checked Exception
- 반드시 예외를 처리해야 함
- 컴파일 단계에서 확인
Unchecked Exception
- 예외 처리를 강제하지 않음
- 실행 단계에서 확인
- RuntimeException 하위 예외
커스텀한 예외 만드는 방법
class MyException extends Exception {
public MyException(String errorMessage) {
// 부모의 생성자 호출
super(errorMessage);
}
}
public class Main {
public static void main(String args[]) {
try
throw new MyException("메세지");
}
catch (MyException ex) {
System.out.println("Caught");
System.out.println(ex.getMessage());
}
}
}
댓글 없음:
댓글 쓰기