티스토리 뷰
예외처리 정리
1. 자바에서의 Error vs Exception
에러는 컴퓨터의 오동작 or 고장으로 응용프로그램이 오류가 발생
예외는 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 발생
2. 예외클래스 계층
RuntimeException
- 종류 : NullPointerException,ArrayIndexOutOfBoundsException,NumberFormatException 등.
- Catch 의무 없다. 따라서 throw 의무도 없다.
- 그래서 throws를 적지 않아도 throw 할 수 있다.
- 언체크 예외
- catch ~ try 안써도 컴파일은 된다.
Exception
- 자바에서는 런타임 예외 제외 예외발생가능성 있는 코드는 try-catch-finally 블록으로 처리하게 강제한다.
- 종류 : InputMismatchException,NumberFormatException,FileNotFoundException 등 RuntimeException을 제외한 예외들
- Catch 의무가 있다. 따라서 Catch하지 않으려면 throw라도 꼭 해야한다.
- throw 하려면 반드시 throws 해줘야한다.
- 예외처리를 하지 않으면 컴파일되지 않는다.
3. 예외처리 방법.
3-1. try-finally-catch 블록으로 예외 직접처리하기.
try { 수행 하고싶은 문장 }
catch1(Exception1 e){ Exception1 이 발생했을 때 수행할 문장. } ... catchN(ExceptionN e){ ExceptionN 이 발생했을 때 .. }
finally{ 항상 수행할 문장 }
<런타임 에러 예제, ArrayIndexOutOfBoundsException>
public static void main(String args[]){
String[] name = new String[2];
try{
name[0] = "이름0";
System.out.println("이름 : "+name[0]);
name[1] = "이름1";
System.out.println("이름 : "+name[1]);
name[2] = "이름2";
System.out.println("이름 : "+name[2]);
}catch(ArrayIndexOutOfBoundsException e | NumberFormatException e){
System.out.println("배열 참조 에러 or NumberFormatException 에러 발생.");
}catch(Exception e){
System.out.println(e.getMessage());
}finally{
System.out.println("시스템 종료.");
}
}
3-2. Throws 문 으로 예외 떠넘기기.
try { 메소드명 Throws 예외클래스1,예외클래스2, ... }
--> Throws 가 붙은 메소드는 try 로 처리해야만, 호출한 메소드의 catch로 돌아갈 수 있다.
3-3. 사용자 정의 예외 만들어서 관리하기.(Application Exception)
1. 선언방법
public class myException extends [ Exception or RuntimeException ] {
public myException() { 생성자 }
public myException(String message) { super(message) }; // message : 예외발생 원인을 전달하기 위한 매개벼수.
}
2. 에외 발생시키기
throw new myException();
throw new myException("메시지"); 로 예외 발생가능
3. 예제
public void myMethod throws myException{
if(잔금<인출할돈)
throw new myException("잔고 부족으로 인출 불가능");
}
4. getMessage(), printStackTrace() 메소드.
예외에 대한 정보를 얻을 수 있다.
when? message 매개변수 갖는 생성자로 에러 생성했을 때만
how? e.getMessage() --> message 매개변수를 리턴해준다.
printStackTrace : 예외 발생경로를 추적해서 알려준다.(java 코드 라인 어디서 발생했는지)
'PL > Java' 카테고리의 다른 글
11-2.System,Class 클래스, Reflection 정리 (0) | 2018.09.07 |
---|---|
11-1. 자바 기본 API 클래스(lang,util패키지,Objects 클래스) 정리 (0) | 2018.09.07 |
9. 중첩 클래스와 중첩 인터페이스, 익명객체 (0) | 2018.09.04 |
8. 인터페이스 (0) | 2018.09.04 |
7. 상속, 오버라이딩, final 클래스, protected, 다형성, 추상클래스, 인터페이스 (0) | 2018.08.24 |