13_java_Exception

study/java · 2019. 11. 28. 08:37

@@@ 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