예외란?
사용자의 잘못된 조작이나 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류.
예외는 예외처리를 통해 프로그램을 종료하지 않고 정상 실행이 가능하도록 할 수 있다.
1.일반 예외 (컴파일러 체크 예외)
- 자바 소스를 컴파일 하는 과정에서 예외 처리 코드가 필요한지 검사한다.
- 예외 처리 코드가 없다면 컴파일 오류 발생
- Exception을 상속받음
2.실행예외
- 컴파일 하는 과정에서 예외처리 코드를 검사하지 않는 예외
- RuntimeException을 상속받음
- 컴파일 시 예외 처리를 확인하냐의 차이일 뿐, 두가지 예외 모두 예외 처리가 필요하다.
- 개발자가 실행 예외 처리 코드를 작성하지 않았다면 해당 예외 발생시 프로그램이 곧바로 종료된다.
- 따라서 적재적소에 예외 처리 코드를 제대로 작성해야한다.
- NullPointerException, ArrayIndexOutOfBoundsException, NumberFormatException, ClassCastException 등
3. 예외처리코드
try{
// 예외 발생 가능 코드
} catch(예외클래스 e) {
// 예외 처리
} fianlly {
// 항상 실행
}
- try 블록 코드에서 예외가 발생하면 즉시 실행을멈추고 catch 블록으로 이동하여 예외처리코드를 실행하고 finally 블록 코드를 실행한다.
- 예외 발생 여부와 상관없이 항상 실행할 내용이 있을 경우에만 finally 블록을 작성하면 된다. 생략 가능하다.
4. 예외 종류에 따른 처리 코드
4.1 다중 catcch
catch 순서
상위 예외 클래스가 하위 예외 클래스보다 아래쪽에 위치해야한다.
try블록에서 예외가 발생했을 때, 에외를 처리해줄 catch 블록은 위에서부터 차례대로 검색되기 때문이다.
try {
ArrayIndexOutOfBoundsException 발생
다른 Exception 발생
} catch(ArrayIndexOutOfBoundsException e){
} catch(Exception e){
}
5. 예외 떠넘기
예외 발생시
- 1. try-catch 로 예외를 처리
- 2. 메소드를 호출한 곳으로 예외를 떠넘길 수도 있음.
throws가 붙어있는 메소드는 반드시 try 블록내에서 호출되어야 하고, catch 블록에서 떠넘겨 받은 예외를 처리해야한다.
public void method1() {
try{
method2();
} catch(ClassNorFoundException e){
//예외처리 코드
System.out.println("클래스가 존재하지 않음"):
}
}
public void method2() throws ClassNotFoundException{
Class clazz = Class.forName("java.lang.String2");
}
6. 사용자 정의 예외와 예외 발생
- 일반 예외로 선언할 경우 Exception 상속하고, 실행 예외로 선언할 경우 RuntimeException을 상속하면 된다.
- 메소드 선언들을 포함할 수 있지만 대부분 생성자 선언을 포함한다.
- - 기본생성자
- - 예외 발생 메시지를 전달하기 위해 String 타입의 매개 변수를 갖는 생성자
7. 예외 정보 얻기
- getMessage() :예외메시지 출력
- printStackTrace() : 예외 발생 코드를 추적해서 모두 콘솔에 출력
'JAVA' 카테고리의 다른 글
람다식 (0) | 2023.07.26 |
---|---|
정적 팩토리 메소드 (static factory method) (0) | 2023.07.26 |
[JAVA/개념] 9장 익명객체 (0) | 2023.07.08 |
[JAVA/개념] 11장 기본 API 클래스 (1) | 2023.07.08 |
[JAVA/개념] 인터페이스 (0) | 2023.07.02 |