티스토리 뷰

PL/Java

10. 예외처리

Jinhyy 2018. 9. 6. 17:07

예외처리 정리



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 코드 라인 어디서 발생했는지) 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함