Exception : 모든 예외들의 상위 클래스(SuperClass)
ClassNotFoundException : 클래스를 찾지 못하였을 때, 예외 발생 정보를 저장하는 클래스
InterruptedException : 흐름이 중단되었을 때, 예외 발생 정보를 저장하는 클래스
NullPointerException : 실제 값이 아닌 null을 가지고 있는 객체/변수를 호출할 때 발생
NumberFormatException : 숫자가 아닌 리터럴을 숫자로 변환할 경우 발생
ArrayIndexOutOfBoundsException : 정해진 배열의 크기보다 크거나 음수 index에 대한 요청
InputMismatchException : input의 타입이 일치하지 않을 때
try {
'예외가 발생할 것 같은 코드 or 일반예외'
} catch( 예외클래스명 매개변수명 ){
`예외발생시 실행문`
} catch(){
} finally{'예외 유무와 상관없이 무조건 실행'}
public class Practice {
public static void main(String[] args) {
// [1] 일반 예외
// 예외 유무와 상관없이 무조건 예외처리를 하는 인위적으로 예외를 발생시킴
try {
Class.forName("java.lang.String");
//Class.forName( 클래스경로 ); : 해당 경로의 클래스를 읽어오는 함수
// String Class가 존재함 >> 밑의 catch 까지 실행하지 않음
} catch (ClassNotFoundException e) {
// catch( 예외클래스면 매개변수명 ) // 예외발생 시 처리를 위한 코드
System.out.println("[예외발생] String 클래스가 없습니다." + e);
}
// [2] 일반예외, 예외 발생
try {
Class.forName("java.lang.String2");
// String2 Class는 존재하지 않음
} catch (ClassNotFoundException e) {
System.out.println("[예외발생] String2 클래스가 없습니다." + e);
// String2 Class가 없으므로 >> catch 실행
}
}
}
예외 발생 시, 메소드를 호출한 곳으로 예외를 전달(return)
한 곳에서 예외처리를 하기 위해 메소드 내부에서 발생한 예외를 다른 곳으로 이동·전달·리턴할 수 있음
public class Practice {
//(1) 예외가 발생하는 메소드 생성
// (3) 예외 발생시 예외 던지기(throws)
// 메소드명() throws 예외클래스명{}
// 일반예외 클래스는 주로 throws 예외 코드가 존재
// 실행예외 클래스들은 주로 throws 예외 코드가 없음
public static void method1() throws NullPointerException{
String str = null;
System.out.println(str.length()); // 예외 발생이 예측됨
}
public static void method2() throws ClassNotFoundException {
Class.forName("com.sql.jdbc"); //클래스가 있는지 없는지 모름, 일반예외
}
public static void main(String[] args) {
try {
//(2) 예외 메소드 실행
method1();
} catch ( NullPointerException e) {
System.out.println("[method1의 예외 발행]" + e );
}
try {
method2();
} catch (ClassNotFoundException e){
System.out.println("[method2의 예외발생]" + e);
}
}
}