예외와 예외 클래스
예외는 일반 예외와 실행 예외가 있다
일반 예외(컴파일러 체크 예외)
프로그램 실행 시 예외가 발생할 가능성이 높기 때문에
컴파일하는 과정에서 해당 예외 처리 코드가 있는지 검사
예외 처리 코드가 없다면 컴파일 오류
실행 예외(컴파일러 넌 체크 예외)
실행 시 예측할 수 없이 갑자기 발생하기 때문에
컴파일하는 과정에서 예외 처리코드가 있는지 검사 X
일반 예외와 실행 예외 클래스는 RuntimeException 클래스를 기준으로 구별
RuntimeException의 하위 클래스이면 실행 예외 클래스
아니면 일반 예외 클래스
클래스 상속 관계에서 부모(조상)에
RuntimeException이 있으면 실행 예외 클래스
실행 예외
컴파일러가 체크하지 않기 때문에
개발자의 경험에 의해서 예외 처리코드를 작성
NullPointerException
가장 빈번하게 발생
null값을 같는 참조 변수로 객체 접근 연산자(.)를 사용 시 발생
public class NullPointerException{
public static void main(){
String data =null;
System.out.println(data.toString());
}
}
컴파일 에러는 뜨지 않는다
하지만 실행시켜 보면
NullPointerException이 발생한다
ArrayIndexOutOfBoundsException
배열에서 인덱스 범위를 초과할 경우
public class ArrayIndexOutOfBoundsException{
public static void main(String[] args){
int[] array = {1,2,3};
System.out.println(array[3]);
}
}
역시 컴파일 에러는 뜨지 않는다
NumberFormatException
문자열로 되어 있는 데이터를 숫자로 변경할 때
parseXXX()메소드를 사용하는데
문자열이이 숫자로변경 가능하다면 숫자를 리턴하지만
숫자로 변환될 수 없는 문자를 포함할 시 발생
public class NumberFormatException{
public static void main(String[] args){
String data1 = "100";
String data2 = "a100";
int val1 = Integer.parseInt(data1);
int val2 = Integer.parseInt(data2);
int result = val1 + val2;
System.out.println(result);
}
}
ClassCastException
상위 클래스와 하위 클래스 간에 발생
Cat과 Dog는 추상 클래스 Animal의 자식 클래스
TV와 Audio는 RemoteControl의 구현 클래스
public class Test{
public static void main(String[] args){
Animal animal = new Dog();
Dog dog = (Dog)animal;//올바른 Casting
Cat cat = (Cat)animal;//ClassCastException발생
RemoteControl remocon = new TV();
TV tv = (TV)remocon;//올바른 Casting
Audio audio = (Audio)remocon;//ClassCastException발생
}
}