개발/JAVA

[JAVA] 예외처리

mabb 2022. 5. 19. 10:40
반응형

 안녕하세요. 삶의 질을 높이고자 노력하는 영차영차입니다.
자바 기본기를 탄탄히 다지기 위한 공부 목적 포스팅입니다.
이것이자바다, HeadFirstJava 등의 교재와 구글링을 토대로 본인의 이해를 위해 작성하였으며
계속해서 살을 붙여나갈 계획입니다.
틀린 부분이 있을 경우 댓글 남겨주시면 감사하겠습니다.
---------------------------------------------------------------------------------------------------------

WHY
- 예외가 발생하여 프로그램이 비정상적으로 종료되는 것을 방지하기 위함.
- 예외발생시 수행 동작을 만들어 예외에 대비할 수 있다.  -> 예외가 발생해도 정상 실행 상태를 유지할 수 있다.

에러error은 코드로 대처할 수 없는 하드웨어 상의 문제 -> 개발자가 처리 불가.
예외exception은 사용자의 오조작 및 개발문제로 발생하는 오류 - > 개발자가 예외처리 가능

Exception Handling

자바에서는 예외도 클래스로 만들어 두었다. (정말 모든 것이 클래스인 듯)

예외 최상위 클래스 Exception

실행예외 RuntimeException  -> 컴파일러가 체크해주지 않음 -> 사용자의 경험으로 처리해야함
일반예외 != RuntimeException ->컴파일러가 체크해줌  checked exception -> 예외처리를 하라고 알려줌

자주보는 실행예외
NullPointerException 
->null인지 체크하기

ArrayIndexOutOfBoundsException
->배열의 인덱스를 확인하기

NumberFormatException
->숫자로 변환이 가능한지 확인하기

ClassCastException
-> instanceof 체크하기


예외를 처리하는 방법 try , catch, [finally]

try { }  : 예외가 발생할 수 있는 부분을 넣는다.
catch( 예외타입 e ) { } : 예외타입 별 예외 발생 시 실행할 부분을 넣는다. ※멀티 catch절일 경우 하위예외부터 작성
finally{ } : try든 catch든 실행 후 반드시 실행할 부분을 넣는다.

Class.forName() 클래스객체를 리턴하는 메소드. 없으면 ClassNotFoundException 일반예외발생(Checked Exception)
-> 컴파일러가 예외를 처리하라고 빨간줄을 그어서 알려줌.

예외를 떠넘기는 방법 throws

public void method1() throws Exception { }
-> method1() 메소드를 호출한 곳에서 예외를 처리하도록 떠넘김.
-> 계속 떠넘기다보면 결국은 main메소드에서 처리를해야함.
-> main 메소드에서 예외를 한번에 처리하기위해 떠넘기기도 한다고함.

 

예외를 발생시키는 방법 throw

throw new ㅇㅇㅇException();
*나만의 예외 만들기 ,  예외의 아버지 Exception을 상속받는 클래스를 만든다.


자동 리소스 닫기

close()를 해주어야하는 리소스 객체들을 자동으로 닫아주는 기능이 있음
JAVA7에서 추가된 try - with - resources
기본 try~catch절과의 차이점은 try에 소괄호()가 있다는 것.
소괄호 속에서 리소스 타입 변수에 리소스 객체를 대입해주면 된다.

try( InputStream is = new InputStream("text.java")) {
  is. read();
} catch ( Exception e) {
// 예외처리문
}

기존처럼 finally{ }  속의 try~catch절 속의 close()를 선언하지 않아도 됨

반응형

'개발 > JAVA' 카테고리의 다른 글

[JAVA] 람다식  (0) 2022.05.19
[JAVA] 제네릭  (0) 2022.05.19
[JAVA] 익명객체, 익명구현객체, 익명자식객체  (0) 2022.05.19
[JAVA] 자바의 구조_ 상속 및 구현, 오버라이드  (0) 2022.05.19
[JAVA] @어노테이션  (0) 2022.05.19