일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- getMessage()
- exception re-throwing
- 인텔리제이
- 예외발생
- 자바클래스가 안보일때
- printStackTrace()
- source root
- 예외 발생
- mvc project 생성
- 인텔리제이물음표파일
- throw e
- 빨간파일
- checked예외
- 깃베쉬
- 빨간폴더
- 사용자 정의 예외
- arrays메서드
- chained exception
- 예외처리
- 파일을 읽을 수 없을때
- 색상에 따른 상태
- 이클립스
- 포트충돌
- 멀티 catch 블럭
- mark directory as
- POST요청
- 스프링 mvc프로젝트가 안뜰때
- unchecked예외
- 설치에러
- 소스루트설정
- Today
- Total
프로그래밍 스티치
예외 발생시키기 본문
예외 발생시키기
키워드 throw를 사용해서 프로그래머가 고의로 예외를 발생시킬 수 있다!
방법은
1.연산자 new를 이용해서 발생시키려는 예외 클래스의 객체를 만든 다음
ex) Exception e = new Exception("고의로 발생 예시");
2.키워드 throw를 이용해서 예외를 발생시킨다.
thorw e;
try {
Exception e = new Exception("고의로 발생시켰음.");
throw e; // 예외를 발생시킴
// throw new Exception("고의로 발생시켰음.");
} catch (Exception e) {
System.out.println("에러 메시지 : " + e.getMessage());
e.printStackTrace();
}
System.out.println("프로그램이 정상 종료되었음.");
Exception인스턴스를 생성할 때, 생성자에 String을 넣어주면, 이 String이 Exception인스턴스에 메시지로 저장된다. 이 메시지는 getMessage()를 이용해서 얻을 수 있다!
그렇다면 예외를 왜 일부러 발생시킬까? 그 이유는
1.디버깅을 하기위해서
2.필터링을 하는것 ->이후에 로직을 타지않기 위해서
3.피드백을 위해서
정도로 요약할 수 있을것 같다.
checked예외, unchecked 예외
public static void main(String[] args) {
throw new Exception(); // Exception을 고의로 발생시킨다.
}
이 예제를 작성하고나면 thow new Exception();에 빨간색 밑줄이 생기며 컴파일이 되지않을것입니다. 바로 예외처리가 되어있지 않기때문인데요, 위의 결과에서 알 수 있는것처럼 'Exception클래스와 그 자손들(checked예외)'은 예외가 발생할 가능성이 있는 문장들에 대해 예외처리를 해주지 않으면 컴파일 조차 되지 않습니다.
즉 예외처리 필수!
public static void main(String[] args) {
throw new RuntimeException(); // RuntimeException을 고의로 발생시킨다.
}
하지만 위의 예제는 예외처리를 하지않았음에도 불구하고 컴파일이 성공적으로 진행이됩니다. 하지만 실행하면 RuntimeException이 발생하여 비정상적으로 종료 됩니다. 이러한 이유는 'RuntimeException클래스와 그 자손(unchecked예외)'에 해당하는 예외는 프로그래머가 실수로 발생하는 것들이기 때문에 예외처리를 강제하지 않습니다.
만약에 RuntimeException클래스들에 속하는 예외가 발생할 가능성이 있는 코드에도 예외처리를 해야한다면, 참조변수와 배열이 사용되는 모든 곳에 예외처리를 해주어야 할것입니다.
'JAVA > 예외처리' 카테고리의 다른 글
finally블럭 (0) | 2022.02.09 |
---|---|
메서드에 예외 선언하기 (0) | 2022.02.08 |
멀티 catch 블럭 (0) | 2022.02.08 |
try-catch문에서의 흐름 (0) | 2022.02.08 |
예외처리(exception handling) (0) | 2022.02.08 |