throws : 예외 발생한 메소드를 호출한 caller 메소드에서 처리하도록 하는 것.
try, catch, fianlly : 발생한 예외를 직접 처리 하는 것
throws
-발생한 Exception에 대해 자신이 책임을 지지 않고 자신을 호출한 곳으로 Exception을 던져주는 역할
throws구문
[제한자] returnType 메서드이름([매개변수]) throws ExceptionType , ..... { }
ex : public void go() throws AException, BException{}
메소드 overriding 복습
-하위 class에서 부모의 메소드 재정리
◇규칙-전제 : 이름 통일
① return Type, 매개변수가 동일
② 하위의 접근제한자가 상위것과 같거나 더 넓어야 한다.
③ 부모가 throws한 것만 할 수 있다.
- 부모에서 throws 한것을 안할 수 있다.
Super클래스
public void go() throws AException{ ~~~~}Sub클래스
public void go(){}가능하다
public void go() throws AException, BException불가능하다, 더 던지는것은 불가능하며, 최상위 부모는 보지 않고 바로 위 부모만 확인해야 한다.
public void go() throws A1Exception, A2Exception부모타입이라면 던질수 있다.
try, catch, finally의 사용
try{ // 오류가 발생 할지 안 할지 확실치 않으므로 일단 시도 (try)
오류(예외)가 발생할 가능성이 있는 코드 } catch(예외타입 e){ // 예외타입에 맞는 예외가 발생한다면 잡는다 (catch) / 다른 타입이 발생한다면 못 잡는다. 처리코드 }
~try내부에 여러 코드를 일괄 처리 할 수 있지만 Exception이 발생하면 Exception을 처리하고 try/catch밖의 실행구문을 실행한다.
public class ExceptionTest1 { public static void main(String[] args) { //uncheck 계열의 Exception //ArrayIndexOutOfBoundsException - 배열의 index범위를 넘었을때 발생 //NullPointerException - null값을 가진 변수의 instance멤버 호출시 발생 //ArithmeticException - 산술 연산상 문제 발생시 발생(0으로 나눈 경우) String str = null; try{System.out.println(str.concat("def"));//null포인터 인셉션 일어남//100% }catch(NullPointerException ne){ System.out.println("NullPointerException 1번); } try{System.out.println(10/0); }catch(ArithmeticException eee){ System.out.println("ArithmeticException 2번"); }try{ int[] arr={10,20,30}; System.out.println(arr[10]); }catch(ArrayIndexOutOfBoundsException eeee){ System.out.println("ArrayIndexOutOfBoundsException 3번"); } System.out.println("메소드 종료"); } }
<결과창>
하지만 위 소스는 모든 것에 예외처리를 주었다. 또한 각각 try-catch구문을 따로 해놓아 예외처리를 따로따로 처리한 다.
<금일 진행한 소스코드>
<Divide.java와 ExceptionTest.java, ZeroDivideException.java SET>
ExceptionTest 결과값