[Java] 예외 발생시키기

nathan·2022년 1월 26일
0

JAVA

목록 보기
34/45

예외 발생시키기

    1. 연산자 new를 이용해서 발생시키려는 예외 클래스의 객체를 만든 다음
    • Exception e = new Exception("고의로 발생시킴");
    1. 키워드 throw를 이용해서 예외를 발생시킨다.
    • throw e;
 public class Ex8_6 {
    public static void main(String[] args) {
        try{
            Exception e = new Exception("고의로 발생시킴");
            throw e; // 예외 발생
            // throw new Exception("고의 발생"); // 한 줄로 쓸 수도 있음
        } catch (Exception e){
            System.out.println(e.getMessage());
            e.printStackTrace();
        }

        
        System.out.println("프로그램이 정상 종료");
    }
}

>>>
고의로 발생시킴
프로그램이 정상 종료
java.lang.Exception: 고의로 발생시킴
	at Ex8_6.main(Ex8_6.java:4)

Process finished with exit code 0

checked 예외, unchecked 예외

  • checked 예외 : 컴파일러가 예외 처리 여부를 체크(예외 처리가 필수적)
    • Exception 클래스와 그 자손들을 일컫는다.
  • unchecked 예외 : 컴파일러가 예외 처리 여부를 체크 안함(예외 처리가 선택적)
    • RuntimeException 클래스와 그 자손들을 일컫는다.

Example (checked 예외)

public class Ex8_6 {
    public static void main(String[] args) {
        throw new Exception(); // checked 예외이므로 예외처리가 필수적으로 들어가야 한다.
    }
}

>>>
java: unreported exception java.lang.Exception; must be caught or declared to be thrown

Example (unchecked 예외)

  • 컴파일은 제대로 됨
  • 컴파일은 잘 됐더라도, 실행시 예외가 발생한 모습
public class Ex8_6 {
    public static void main(String[] args) {
        throw new RuntimeException();
    }
}

>>>
Exception in thread "main" java.lang.RuntimeException
	at Ex8_6.main(Ex8_6.java:3)

이렇게 예외를 checked, unchecked로 나누는 이유가 뭘까?

  • 예를들어 RuntimeException 자손 클래스로 IndexOutOfBoundsException이 있다.
  • 만약 모든 예외를 다 checked(필수 예외처리)로 다뤄야 한다면, 배열을 사용할 때마다 항상 try-catch로 묶어줘야 할 것이다.(예외 발생 가능성이 있기 때문)

References

profile
나는 날마다 모든 면에서 점점 더 나아지고 있다.

0개의 댓글