Purple Bobblehead Bunny

Backend/JAVA

[JAVA] 예외 처리 Exception

준영어린이 2022. 3. 2. 12:49

 

예외는 의도하지 않는 결과가 나오는 것을 의미한다.

 

 

프로그램이 멈추거나, 이상한 결과를 가져 올 경우를 대비해 자바는 각 예외 상황을 Exception 클래스와 그 클래스를

상속한 클래스를 만들었고, try~catch~finally 라는 것을 이용하여 예외를 처리한다

모든 예외는 Exception 클래스를 상속하고 Exception은 Throwable 이라는 클래스를 상속한다.

 

 

위 예제를 실행시키면 main에서 ArithmeticException 오류가 발생하게 된다.

 

 

try~catch 문을 이용하여 예외를 처리했다. 

Line5~8 --> try문이다. try문에서 예외가 발생 할 것 같은 부분을 둘러싼다. -->

Line 10~12 --> catch문이다. "잡다"라는 뜻을 가지고 있고, try문에서 발생한 예외를 잡는 기능을 한다.

catch문은 참조값을 가지게 되는데, 특정 예외(ex.ArithmeticException)를 잡도록 할 수 있다.

Line 12 --> printStackTrace(); 예외의 내용을 보여준다.

첫번 째 try catch문은 배열 범위 관련 예외(ArrayIndexOutOfBoundsException) 

두번 째 try catch문은 배열 크기 관련 예외(NegativeArraySizeException)

세번 째 try catch문은 null 포인터 관련 예외(NullPointerException)

 

결과

try ~ catch ~ catch ~ catch  

 

try 문 안에 여러 에외가 발생할 수 있기 때문에 여러개의 catch를 둔다.( if ~ else if ~ else if 와 같다고 보면 될 듯)

 

위 예제를 이용해 하나의 try문 안에 3개의 catch문으로  나눠본다.

결과

 

..결과가 이상하다.. 

이유는 ? 먼저 자바프로글램은 예외가 발생하는 순간 프로그램이 중지가 된다.

 

 

Line 7에서 예외가 발생하고 프로그램이 중지가 된다.

예외를 확인하는 catch문은 if ~else if ~ else if ~ else 를 생각하면 편할 듯 하다..'

 

 

직접 예외를 처리 (Exception 클래스 상속)

Exception 클래스를 상속을 해 예외 클래스를 직접 만들 수 있다.

 

class __ extends Exception {

       public __() {

          super("Exception message"); // super 꼭 필요

          }

}

 

음수를 입력하면 안되는 프로그램 (예외 상황)

 

class MinusException extends Exception {

       public MinusException() {

          super("음수가 입력됨");          

        }

}

이렇게 예외를 만들어서 사용하려면 throw 가 필요하다

예외가 발생하면 그 예외를 던지게 되고(throw) 그 예외를 잡아서(catch) 처리를 하게 된다.

int형 변수 num의 값을 판단하여 그 값으 0보다 작으면  만든 예외를 throw하게 만들었다.

그럼 catch문에서 반응을 한다.

 

여기서 다른 메소드에서 예외가 발생하게 된다면 throw 처리는??

 

메소드가 다른데 어떻게 예외를 던져줘야 할까..

 

메소드에 throws 예외 클래스를 넣어주면 된다.

public static int Method() throws MinusException {

         int num;

         기능들..

         if(num < 0) {

            throw new MinusException();

      }

  return num;

메소드 옆에 throws를  붙이고 던져줄 예외를 써주고 메소드 내에서 그 예외를 던져주면 된다.

 

finally

그 어떤 예외가 발생해도 무조건 실행하는 finally

바로 위 예제에서 finally를 넣게 되면?

 

Line11의 catch 아래에 finally만 추가를 했다.

결과를 보면 예외가 발생했음에도 불구하고 finally는 실행이 된다.

 

'Backend > JAVA' 카테고리의 다른 글

[JAVA] StringBuilder, StringBuffer  (0) 2022.03.02
[JAVA] String 클래스  (0) 2022.03.02
[JAVA] 바이트기반 Stream  (0) 2022.02.24
[JAVA] 문자기반 Stream  (0) 2022.02.24
[JAVA] Stream으로 파일 불러오기,복사,저장  (0) 2022.02.24