게으른 나르의 코딩

예외처리 본문

Languages/Java

예외처리

개발자 나르 2021. 7. 3. 15:02
반응형

예외처리

컴퓨터 하드웨어의 오동작 또는 고장으로 인해 응용프로그램 실행 오류가 발생하는 것을 error라고 한다.

JVM 실행에 문제가 생겼다는 것으로 결국 실행으 불능이 된다.

자바에서는 에러 이외에 예외(exception)라고 부르는 오류가 있다.

자바에서는 예외를 클래스로 관리한다. JVM은 프로그램을 실행하는 도중에 예외가 발생하면 해당 예외 클래스로 객체를 생성한다.

그리고 나서 예외 처리 코드에서 예외 객체를 이용할 수 있도록 해준다. 모든 예외 클래스들은 다음과 같이 java.lang.Exception 클래스를 상속 받는다.

 

NullPointerException - 객체 참조가 없는 상태. 객체가 없는 상태에서 객체를 사용해서 예외가 발생

ArrayindexOutOfBoundsException - 배열에서 인덱스 범위를 초과하여 사용할 경우 생기는 예외

NumberFormatException - 문자열로 되어 있는 데이터를 숫자로 변경하는 경우 생기는 예외

 

더욱 많은 예외를 참조 - https://docs.oracle.com/javase/7/docs/api/

 

Java Platform SE 7

 

docs.oracle.com

 

예외 처리 코드

예외가 발생했을 경우 프로그램의 갑작스런 종료를 막고, 정상 실행을 유지할 수 있도록 처리하는 코드

try - catch - finally

 

정상 실행 되었을 경우

더보기

try {

예외 발생 가능 코드

} catch(예외 클래스 e) {

예외 처리

} finally {

항상 실행;

}

정상 실행할 경우 catch 구문은 뛰어넘고 바로 try - finally 구문으로 넘어간다.

예외가 발생되었을 경우

더보기

try {

예외 발생

} catch(예외클래스 e) {

예외 처리

} finally {

항상 실행;

}

예외가 발생되었을 경우 catch구문에서 예외처리를 거쳐서 finally 구문으로 넘어가서 실행을 한다.

catch 순서

다중 catch 블록을 작성할 때 주의할 점은 상위 예외 클래스가 하위 예외 클래스보다 아래쪽에 위치해야 한다.

try 블록에서 예외가 발생했을 때, 예외를 처리해줄 catch 블록은 위에서부터 차례대로 검색된다.

상위 예외 클래스는 Exception (부모 클래스)

하위는 자식 클래스

 

다중 catch 블록을 할 때 첫번째 catch 블록을 실행하고, 그 밖의 다른 예외가 발생하면 두번 째 catch 블록을 실행한다.

그러므로 상위 예외 클래스가 아래쪽에 위치해야 자식클래스가 못잡는 예외들을 처리할 수 있다.

 

예외 발생시키기

try-catch 블록으로 예외를 처리할 수 있지만, 대부분은 자신을 호출한 곳에서 예외를 처리하도록 throws 키워드로 예외를 떠넘긴다.

더보기

public void method() trows XXXException {

     throw new XXXException("메세지");

}

예를 들어 사용자 정의 예외 발생시키기

더보기

public class Account {

     private long balance;

 

     public Acount() { }     //생성자=class name과 일치하는 것

 

     public long getBalance() {     //함수생성

          return balance;

     }

     public void deposit(int money) {

           balance += money;

     }

     public void withdraw(int money) throws BalanceInsufficientException {     //사용자 정의 예외 떠넘기기

          if(balance < money) {

               throw new BalanceInsufficientException("잔고부족:"+(money-balance)+" 모자람");     //사용자 정의 예외 발생

          }

          balance -= money;

     }

}

 

throws와 throw의 차이는 throws는 예외 자체를 바로 넘겨버린다. throw는 예외를 발생시키면서 다음으로 넘긴다.

예외 정보 얻기

try 블록에서 예외가 발생되면 예외 객체는 catch 블록의 매개 변수에서 참조하게 되서 매개 변수를 이용하면 예외 객체의 정보를 알 수 있다.

모든 예외 객체는 Exception 클래스를 상속하기 때문에 Exception이 가지고 있는 메소드들을 모든 예외 객체에서 호출할 수 있다.

그 중에서 가장 많이 사용되는 메소드는 getMessage()와 printStackTrace()이다.

더보기

try {

     예외 객체 생성

} catch(예외클래스 e) {

//예외가 가지고 있는 Message 얻기

String messge = e.getMessage();

 

//예외의 발새 경로를 추적

e.printStackTrace();

반응형

'Languages > Java' 카테고리의 다른 글

클래스  (0) 2021.07.12
버블정렬(+Arrays 클래스)  (0) 2021.07.12
File Input&Output(수업에서 더 진도 나가면 추가)  (0) 2021.07.03
지역변수와 전역변수  (0) 2021.07.03
Method(함수) 과 Return  (0) 2021.07.03
Comments