NullPointerException
- 자바에서 가장 빈번하게 발생하는 실행예외
- 객체 참조가 없는 상태, 즉 null 값을 갖는 참조 변수로 접근 연산자(.) 사용했을 때 발생
public class NullPointer {
public static void main(String[] args) {
String data = null;
System.out.println(data.toString());
}
}
// data 변수가 null값 가지고 있기 때문에 Sting객체 참조하지 않음
// 이 상태에서 메서드 호출 시 에러 발생
ArrayIndexOutOfBoundsException
- 배열에서 인덱스 범위 초과할 경우 발생
public class ArrayIndexOutOfBoundsExceptionExample {
public static void main(String[] args) {
String data1 = args[0];
// 실행 매개값을 주지 않아서 에러 발
String data2 = args[1];
System.out.println("args[0]: " + data1);
System.out.println("args[1]: " + data2);
}
}
NumberFormatException
- 문자열이 숫자로 변환될 수 없을 때 발생
public class NumberFormatExceptionExample {
public static void main(String[] args) {
String data1 = "100";
String data2 = "a100";
int value1 = Integer.parseInt(data1); // 변환 성공
int value2 = Integer.parseInt(data2); // 에러 발
int result = value1 + value2;
System.out.println(data1 + "+" + data2 + "=" + result);
}
}
ClassCastException
- 클래스 타입 변환 할 수 없을 때 발생
- instanceof 연산자로 타입 변환 가능한지 확인하는 것이 좋음
public class ClassCastExceptionExample {
public static void main(String[] args) {
Dog dog = new Dog();
changeDog(dog);
Cat cat = new Cat();
changeDog(cat);
}
public static void changeDog(Animal animal) {
//if(animal instanceof Dog) {
Dog dog = (Dog) animal; //ClassCastException 발생 가능
//}
}
}
class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}
try {
예외 발생 가능 코드
} catch(예외클래스 e) {
예외 처리 // 예외 발생시 실행
} finally {
항상 실행;
// 위에서 return문 사용하더라도 항상 실행
}
다중 catch
- 예외별로 처리 코드를 다르게 실행
- 상위 예외 클래스가 하위 예외 클래스 아래에 위치 해야함!
public class CatchByExceptionKindExample {
public static void main(String[] args) {
try {
String data1 = args[0];
String data2 = args[1];
int value1 = Integer.parseInt(data1);
int value2 = Integer.parseInt(data2);
int result = value1 + value2;
System.out.println(data1 + "+" + data2 + "=" + result);
} catch(ArrayIndexOutOfBoundsException e) {
System.out.println("실행 매개값의 수가 부족합니다.");
} catch(NumberFormatException e) {
System.out.println("숫자로 변환할 수 없습니다.");
} finally {
System.out.println("다시 실행하세요.");
}
}
}
예외 떠넘기기
- throws : 메서드에서 처리하지 않은 예외를 호출한 곳으로 떠넘김
- throws 키워드가 붙어 있는 메서드는 반드시 try 블록 내에서 호출되어야함
public void method1() {
try {
method2();
} catch(ClassNoyFoundException e) {
//예외 처리 코드
System.out.println("클래스가 존재하지 않습니다.");
}
}
public void method2() throws ClassNotFoundException { // 호출한 곳에서 예외 처
Class clazz = Class.forName("java.lang.String2");
}