: 예측가능한 에러를 정상종료가 되도록 처리하는 방법
Exception클래스 : 예외처리의 최고 조상 클래스(자료형)
: try ~ catch 문(짝임, 반드시 같이 존재해야 함)
try문에서 발생된 에러는 catch문에서 해결함. 내가 발생시킨 에러를 내가 처리함.
try문 : 해당 실행문들을 감싸는 위치에 존재
catch문 : try 문에서 발생되는 에러를 처리하는 명령문을 감싸는 위치에 존재함
형식 :
try{
실행코드들;
} catch (예외처리자료형명 객체명){
//try문에서 에러가 발생될 경우 처리할
실행코드들;
...;
} [finally{
에러가 발생이 되든, 발생이 되지 않든 반드시 try ~ catch문에 실행된 후
마지막에 실행되는 부분의 코드들을 기술;}]
: throws
: 위치 메소드 선언문의 ( ) 소괄호 뒤에 존재함.
: 위치 메소드 선언문의 ( ) 소괄호 뒤에 존재함.
형식 :
[접근제어자][기타제어자]리턴타입 메소드명([매개변수들...]) throws 예외처리자료형명, ...{
실행코드들...;
}
public class ExceptionEx00 {
// public static void main(String[] args) {
// try {
// System.out.println("1111");
// Class c = Class.forName("String"); // java.lang.String Class.forName ---> 정확한 경로 기술 필수
// System.out.println(c);
// } catch(Exception e) { // 어떤 종류의 에러인지 잡는 역할, Exception 모든 에러...
// System.out.println(e);
// }
// System.out.println("시스템 정상 종료"); // 정상 종료만 프로그램을 모두 실행하고 종료하는 것.
//
// }
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException {
System.out.println("1111");
Class c1 = Class.forName("String");
System.out.println(c1);
System.out.println("2222");
}
}
public class ExceptionEx01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("1111");
int c; // 지역변수 --> 자동초기화값 없음
// c = 4/0;
System.out.println("2222");
try {
System.out.println("3333");
c = 4 / 0; // 나누고 몫을 가져옴. 나누어지는 수 피젯수
System.out.println("4444");
}catch(ArithmeticException e){
System.out.println("젯수(나누는 수)는 0이 될 수 없습니다. \n이상이 되도록 변경해주세요.");
}
System.out.println("5555");
System.out.println("시스템 종료");
}
}
| 예외 메소드 | 설명 |
|---|---|
| .toString() | 에러에 대한 간단한 설명을 반환함. .getMessage()와 유사함 |
| .getMessage() | 에러에 대한 자세한 설명을 반환함 |
| .printStackTrace() | 에러의 종류와 에러가 발생한 위치를 반환함. |
| 예외의 종류 | 설명 |
|---|---|
| ArithmeticException | 산술 연산 에러 |
| ArrayIndexOutOfBoundsException | 배열의 범위 에러(배열 범위가 주어진 것보다 작거나 클 때 발생) |
| NumberFormatException | 숫자값이 아닌 다른 자료형 입력시 에러 |
| Exception | 자바의 전체 에러 범위 |