일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- subquery
- querydsl
- EC2
- 서브쿼리
- 커밋메세지수정
- 검색
- 테스트
- 추후정리
- application.yml
- 참조키
- 메소드명
- Query
- 2 > /dev/null
- MySQL
- foreignkey
- 네이티브쿼리
- 컨테이너실행
- appspec
- appspec.yml
- 적용우선순위
- WeNews
- ㅔㄴ션
- 메세지수정
- 포트
- docker명령어
- AuthenticationEntryPoint
- 테스트메소드
- 외부키
- 예약
- ubuntu
Archives
- Today
- Total
제뉴어리의 모든것
8. 예외처리 [1.10] 본문
1.10 - 사용자 정의 예외 만들기
기존에 존재하는 예외클래스를 그냥 써도 되지만 필요에 따라 개발자가 예외클래스를 만들어서 예외를 던지거나 해서 사용할 수 있다.
- 예외 만드는법
- 기존에 만들어져 있는 예외 클래스를 상속받아 클래스를 정의한다.
(보통 Exception, 혹은 RuntimeException 클래스를 상속 받아 만든다)
import java.util.Scanner;
public class yeje {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
try{
System.out.println("try문");
printHelloFunc(name);
}
/***
* 아래처럼 Exception을 인자로 하는 catch는 WrongNameException 보다 상위에 있을 수 없고 에러가 발생한다.
* instanceof 연산자로 예외클래스를 분기하는데
* Exception은 모든 예외클래스의 조상이기 때문에 밑에 오는 catch 구문은 진입이 어차피 불가하기 때문이다.
*/
// catch (Exception e)
// {
// System.out.println("Exception catch문");
// }
catch (ArithmeticException e)
{
System.out.println("ArithmeticException catch문");
}
catch (WrongNameException e)
{
System.out.println("WrongNameException catch문");
System.out.println(e.getMessage()); //Exception 클래스의 생성자를 이용하여 초기화한 메세지 출력
e.printStackTrace(); //not thread-safe하다
}
catch (Exception e)
{
System.out.println("Exception catch문");
}
finally {
System.out.println("finally문");
}
System.out.println("정상종료");
}
public static void printHelloFunc(String name) throws WrongNameException { //WrongNameException이 발생 할 수 있다고 선언
if(name.equals("") || name.equals(null))
{
throw new WrongNameException("잘못된 이름"); //임의로 예외 던지기, 메세지를 직접 입력
}
System.out.printf("안녕하세요. %s님", name);
System.out.println();
}
}
class WrongNameException extends Exception{
WrongNameException(String msg)
{
super(msg); //Exception 클래스의 생성자를 이용하여 초기화하면 예외클래스 내에 메세지로써 설정이 가능하다.
}
}
- 결과 화면
- 이름을 입력 안 했을 경우
- 이름을 제대로 입력 한 경우
참고로 위에 결과화면에서
"- 이름을 입력 안 했을 경우" 에서 console에 출력되는 내용의 순서가 이상하다고 생각할 수 있는데,
이유는 printStackTrace() 메소드가 Thread-safe 하지 않기 때문이다.
'JAVA > 자바의정석' 카테고리의 다른 글
Chapter 11. Iterator, ListIterator, Enumeration (0) | 2022.07.10 |
---|---|
Chapter 11. Collection Framework - 3 (컬랙션 프레임웍의 구현체의 대하여 - Set) (0) | 2022.07.09 |
Chapter 11. Collection Framework - 2 (컬랙션 프레임웍의 구현체의 대하여 - List) (0) | 2022.07.09 |
Chapter 7. 제어자 (0) | 2022.07.09 |
Chapter 11. Collection Framework - 1 (컬랙션 프레임웍의 인터페이스에 대하여) (0) | 2022.07.04 |