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("메시지");