예외처리

Shaun·2021년 8월 3일
0

JAVA

목록 보기
6/30

예외처리

1.컴파일에러= 컴파일 시에 발생하는 오류
2. 런타임 에러= 실행 시에 발생하는 오류
3. 논리적 에러 = 실행은 되지만, 의도와 다르게 동작

printStackTrace() = 예외발생 당시의 호출스택 에 있었던 메서드의 정보와 예외 메세지 화면에 출력

getMessage() 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있다.

예외가 발생하면 해당클래스 인스턴스 생성된다.

예외발생 시키기

  1. 예외 클래스의 객체를 만든다음
    Exception e= new Exception("쓰고싶은 메세지" getMessage로 호출)

  2. throw e으로 예외 발생

  3. 합쳐서 thorw new Exception("쓰고싶은 메세지" getMessage로 호출)

프로그래머에 의 한 실수로 발생하는 RuntimeException은 예외 처리를 강제로 하지 않는다. However, 실행 오류는 난다. 이러한 예외들을 unchecked 예외 라고 부르고 예외 처리를 확인하는(강제성 있는) Exception 클래스들은 checked 예외 라고 부른다.

thorws

  • (메서드 throws 예외) 이런식으로 메서드 내에서 발생할수 있는 예외를 적어준다.

  • RuntimeException 은 적지 않는다(강제성 x, 그래서 컴파일떄는 오류가 안나고 돌리면 오류가 난다..)

-반드시 처리 해야할 예외만 선언한다(강제성 o)

※사실 thorws 예외를 처리하는게 아니라 (에러가 있는)메서드를 호출한 메서드에게 떠맡기는 것이다.

즉 예외처리 방법은 크게
1.메서드 내부에서 try-catch 문으로 잡는다

2.throws 로 이메서드는 오류가 있다는것을 선언한뒤 그메서드를 선언한 메서드에게 try-catch문을 떠넘긴다.

Try -with- resources

  • 입출력 하고나서는 꼭 닫아줘야 사용했던 자원(resources)가 반환 된다.

  • try-with-resouces 괄호 ()에 객체를 생성하는 문장을 넣으면, 이객체는 따로 close()를 호출하지 않아도 try블럭을 벗어나느 순간 자동적으로 close가 호출된다.

  • clsoe 자동 호출 하려면 클래스가 AutoCloseable이라는 인터페이스를 구현해야 한다.
    public interface AutoCloseable{
    void close() throws Exception;
    }

    -supprresed 예외

    ※자동 처리되는 close()에서도 오류가 발생 할수 있다. 일반적 오류 + close 오류 = 두예외가 동시에 발생할 수는 없기 떄문에 일반오류를 실제 발생한 예외로 취급하고 , close오류는 억제된 예외(suppressed)로 처리한다. 억제된 예외에 대한 정보는 실제발생한 일반 예외에 저장된다.

예외 만들기

  • Exception 을 상속받는 클래스를 만든다.
  • 클래스 생성자에 super(msg) 을 써 Exception 클래스 생성자 호출

※ 반환 값이 있는 retrun문의 경우, catch 블럭에도 retrun문이 있어야한다. 예외가 발생 했을 경우에도 값을 반환해야하기 떄문이다.(예외가 있어도 그걸처리하고 정상종료를 해야하기 떄문)

예외 되던지기

  • catch 블럭에서 예외 되던지기를 해서 호출한 메서드로 예외를 전달하면, retrurn문이 없어도 된다.
profile
호주쉐프에서 개발자까지..

0개의 댓글