@@@ Exception @@@
@Unchecked Exception
- 별도의 예외처리를 하지 않아도 되는 예외
- 주로 프로그래머의 부주의로 인한 경우가 많기 때문에
예외처리보다는 조건문 등을 이용한 커드 수정 필요
@Checked Exception
- 특정 코드가 예외를 발생시킬 가능성이 있으므로 사용시 반드시 예외처리를 해야되는 예외
@ try~catch 구문
Exception이 발생한 곳에서 직접 처리하는 예외처리 방법
-try : 예외가 발생할 가능성이 있는 코드를 try 블록 {} 내에 넣고 시도
-catch : try 블록내에서 발생하는(던져지는) Exception을 잡아내서 처리하는 방법을 기술
catch 구문은 여러개 작성 가능함, ★ Exception간의 상속 관계를 고려해야함
-finally : try ~ catch 수행 후 마지막으로 반드시 실행해야하는 코드를 작성
(보통 버퍼를 반환할때 사용)
* catch 구문을 여러 개 작성 할 경우 상속 관계에서 가장 자식에 위치한 Exception을 먼저 작성 할 것
-> try 블록에서 Exception이 발생하면 catch 구문의 가장 윗부분부터 Exception 일치 여부를 검사하는데
부모타입의 Exception이 윗부분에 자리잡게되면 해당 타입의 자식 Exception까지 모두 검출하게 됨
@ try~with~resource
try 구문 선언시 매개변수로 try 내부에서 사용할 자원을 미리 함께 선언하여 try 구문 종료시 자동으로
반환하게 하는 방법
@ throws
throw : 강제로 Exception 발생 시키는 키워드
throws : 발생된 Exception을 호출부로 전가하는 키워드
* 여러 Exception을 전가 시킬수 있음
전가되는 Exception이 Checked인 경우 호출부에서 반드시 예외처리가 필요하지만,
Unchecked인 경우 호출부에서 예외처리를 선택적으로 하면됨
@ Exception 과 오버라이딩
오버라이딩 시 throws 하는 Exception의 개수와 상관없이 처리 범위가 같거나 후손이여야함
@ 사용자정의예외
사용자 정의 예외 클래스 생성 방법
-> 기존에 java가 제공해주는 Exception 클래스 중 하나를 상속 받으면 됨
보통 Exception(checked) 또는 RuntimeException(unchecked)을 상속받음
UserException 클래스 생성
여기에 체크드인지 언체크드인지 확인 후 상속
pulbic class UserException extends Exception { //checked
public UserException(){}
public UserException(String msg){
super(msg);
}
}
// 숫자 3개를 입력받아 합을 출력하는 메소드
// 단, 0 입력시, 바로 프로그램 종료
/* -- 제대로 입력한 경우 --
* 입력 1 : 5
* 입력 2 : 10
* 입력 3 : 15
* 합 : 30
* 프로그램 정상 종료.
*/
/* -- 중간에 0을 입력한 경우 --
* 입력 1 : 5
* 입력 2 : 0
* 프로그램 강제 종료.
*/
public class UserExceptionController {
Scanner sc = new Scanner(System.in)
public void method1() {
try {
method2();
System.out.println("프로그램 정상 종료");
} catch (UserException e) {
System.out.println(e.getMessage());
}
}
public void method2() throws UserException {
int num = 0;
int sum = 0;
for(int i=1; i<4; i++) {
System.out.print(" 입력 " + i + ": ");
num = sc.nextInt();
if (num ==0 ) {
throw new UserException("프로그램 강제 종료");
}
sum += num;
}
System.out.println("합 : " + sum);
}
}
'study > java' 카테고리의 다른 글
15_java_복습_Generic (0) | 2022.01.05 |
---|---|
14_java_입출력(IO) (0) | 2019.11.29 |
14_java_용어정리 (0) | 2019.11.13 |
13_java_Map (0) | 2019.11.12 |
12_java_Comparable,Comparator,Set (0) | 2019.11.09 |