반응형

예외

1. 일반예외(Exception) : 컴파일러 체크 예외, 자바 소스를 컴파일하는 과정에서 예외 처리 코드가 필요한지 검사함

2. 실행예외(Runtime Exception) : 컴파일하는 과정에서 예외 처리 코드를 검사하지 않음

컴파일 시 예외 처리 확인 여부만 차이가 있고, 모두 예외 처리가 필요함.

모든 예외 클래스들은 java.lang.Exception 클래스를 상속받음.


실행예외(java.lang.RuntimeException 상속)

1. NullPointerException

객체가 없는 상태에서 객체를 사용하려 하면 발생하는 예외

Null인데 참조하면 발생

 

2. ArrayIndexOutOfBoundsException

배열에서 인덱스 범위를  초과하여 사용할 경우 발생

 

3. NumberFormatException

문자를 숫자로 변환할 때 숫자로 변환될 수 있는 문자가 포함되어 있는 경우 발생

Interger.parseInt("a100"); 이런경우 발생

 

4. ClassCastException

억지로 타입변환을 시도할경우 발생

타입 변환 전에 (변환할객체 instanceof 목표객체) 를 사용해서 타입 변환 가능한지 확인~!(결과값 : true/false)


catch 순서

다중 catch블록 작성시 상위 예외 클래스가 하위 예외 클래스보다 아래쪽에 위치해야 함

Exception 클래스는 맨 마지막으로..

 


 

멀티 catch

하나의 catch 블록에서 여러개의 예외를 처리하는 법 

catch 괄호 ()안에서 | 로 연결하면 된다는데

왜 에러가 나지? ㅡ ㅡ

-> 같은 패키지 안에 ArrayIndexOutOfBoundsException이라는 클래스파일을 만들었어서 그랬다... ㅠ ㅠ 


예외 발생시키기 (throw)


예외 떠넘기기 (throws)

  • throws : 메소드 선언부 끝에 작성되어 메소드에서 처리하지 않은 예외를 호출한 곳으로 떠넘김 
  • throws 키워드가 붙은 메소드는 반드시 try 블록 내에서 호출되어야 함.
  • main 메소드에서 throws 사용시 JVM이 최종적으로 예외의 내용을 콘솔에 출력하는 것으로 예외 처리를 한다.
public void method1() throws Exception{
 
}

자동 리소스 닫기(try with resources)

예외 발생 여부와 상관없이 사용했던 리소스 객체의 close() 메소드를 호출해서 리소스를 닫아준다.

  • 조건 : 리소스 객체는 java.lang.QutoCloseable 인터페이스를 구현하고 있어야 함
  • AutoCloseable의 close() 메소드가 자동호출되는거임

AutoCloseable 인터페이스 구현

객체 생성은 다음과 같이~


사용자 정의 예외 클래스

  • 일반예외로 선언할 경우 Exception 상속, 실행예외로 선언할 경우 RuntimeException 상속
  • 생성자는 두 개를 선언하는 것이 일반적 

 


예외 정보 얻기 

  • getMessage() : 예외 발생 시 메시지를 갖는 생성자를 이용한 경우 메세지를 얻어올 수 있음
} catch(Exception e) {
	String message = e.getMessage();
}
  • printStackTrace() : 예외 발생 코드를 추적해서 콘솔에 출력
반응형

+ Recent posts