11-Exception



exception

  • 자바는 객체지향언어로, 예외 발생시 상황별로 예외 클래스로 정의되어있다.

    • NullPointerException: 객체 참조가 없는 상태
    • ArrayIndexOutoOfBoundsException: 배열의 인덱스 범위가 초과될 경우
    • NumberFormatException: 숫자로 변환될 수 없는 문자가 포함될 경우
    • ArthmeticException : 인수가 0인 경우
    • ClassCaseException: 수행 불가한 타입전환이 일어나는 경우


예외처리코드

: 프로그램에서 예외가 발생할 경우 프로그램의 갑작스러운 종료를 막고 정상 실행을 유지할 수 있도록 처리하는 코드. 컴파일러는 예외발생 가능성 코드를 발견하면 강제적으로 예외처리 코드를 요구한다.


try catch


public static void main(String[] args) {
try {
		 int i = Integer.parseInt(args[0]);
		 int j = Integer.parseInt(args[1]);
		 System.out.println(i/j);
// 예외 발생하면 try는 중단, new ArithmeticException() - catch 이동 - 예외타입 비교
	    }
	   catch(ArithmeticException e) {    
	    	 System.out.println("0을 입력하면 나누기 불가능!");	    	 
	     }
	   finally {
		   System.out.println("항상 실행합니다.");
//finally가 필요한 경우: 파일 입출력 -종료 명시 , db연결-연결헤제 명시 , 네트워크해제명시
		   
	   }
}
 int su = Integer.parseInt("-100");
	    try {
	    if(su <= 0 ) {
	    	throw new NumberFormatException("소수 생성에 부적합합니다.");
	    }
	    }
	    catch(NumberFormatException e ) {
	    	System.out.println(e.getMessage());}
//catch변수에서 예외 객체 e를 생성함으로서, 이를 예외 정보 얻는 것으로 활용한다. 

= try { } 내부에 예외가 발생하면 try는 중단되고 catch로 이동한다.

= finally는 반드시 실행된다. break; return;되더라도 반드시 수행된다.


다중 catch
try{
  ArrayIndexOutOfBoundsException 발생
  NumberFormatException 발생
} catch(ArrayIndexOutOfBoundsException e){
  예외처리1
} catch(NumberFormatException e){
  예외처리2
}

= catch 블록이 여러 개더라도 하나의 catch 블록만 실행(하나 예외가 발생하면 실행 멈춤, 해당 catch블록 이동)

=상위, 하위에 받는 예외들의 순서에 주의하도록 한다



throws

  • 경우에 따라서 메소드를 호출한 곳으로 예외를 떠넘길 수 있다.

  • 예외가 발생한 문장을 포함한 메소드를 호출하는 다른 메소드의 내부상황을 처리한다.

리턴타입 메소드명(매개변수)throws 예외클래스1, 예외클래스2, .. {
  
}

이런 식으로 떠넘기게 되면, 다른 클래스에서 해당 메소드를 호출할 때 예외처리를 반드시 수행해야 한다.


throw

예외를 인위적으로 발생할 수 있는 방법

throw new XXXException();
throw new XXXEXception("메시지");