본문 바로가기
개발자 :-)/Java

[Java] 예외처리

by 뚜생첨 2022. 9. 4.

1. 예외란?

프로그램에 문제가 있는것을 말하며, 예외로 인해 시스템 동작이 멈추는 것을 막는 것을 예외처리 라고한다.

Exception : 개발자가 대처할 수 있음

Error : 개발자가 대처할 수 없음.

 

Exception

  - CheckedException : 예외처리를 반드시 해야하는 경우 (ex 파일시스템, 네트워크 등)

                                     컴파일러가 예외처리 했는지 확인함

  - UncheckedException : 예외처리를 개발자의 판단에 맡기는 경우(ex 데이터 오류)

 

2. Exception 클래스

Exception 클래스의 하위클래스로 대표적으로 NullPointerException, NumberFormatException 등이 있다.

 

NullPointerException : 객체를 가리키지 않고 있는 레퍼런스를 이용할 때

ArrayIndexOutOfBoundException : 배열에서 존재하지 않는 인덱스를 가리킬 때

등등

 

3. try ~ catch

try {
	예외가 발생할 수 있는 코드
} catch (Exception e) {
	예외가 발생했을 때 처리할 코드
}
int i = 10;
int j = 0; 
int k = 0;

try {
	k = i / j;
    System.out.println("test");
    } catch (Exception e){
    e.printStackTrace();
    String msg = e.getMessage();
    System.out.println(msg);
}
System.out.println("after Exception");

예시 코드는 0으로 나눗셈 연산을 할 때 발생하는 예외에 대한 소스코드이다.

발생한 예외에 대해서 처리해주었기 때문에 "after Exception" 문자열이 출력된다.

 

4. 다양한 예외 처리

try {
	//예외가 발생할 수 있는 소스코드
} catch (InputMismatchException e){
    e.printStackTrace();
} catch (ArrayIndexOutOfBoundException e){
    e.printStackTrace();
} catch (Exception e){
    e.printStackTrace();
}

5. finally

예외 발생과 관계없이 반드시 실행되는 부분

try {
	//예외가 발생할 수 있는 소스코드
} catch (InputMismatchException e){
    e.printStackTrace();
} catch (ArrayIndexOutOfBoundException e){
    e.printStackTrace();
} catch (Exception e){
    e.printStackTrace();
} finally {
	System.out.println("반드시 실행되는 부분!");
}

ex) 네트워크 연결이나 파일을 열었을때는 반드시 연결을 끊거나 닫아줘야하기 때문에 finally 에서 해주어야한다!

 

6. throws

예외 발생 시 예외 처리를 직접하지 않고 호출한 곳으로 넘긴다.

//호출부이자 처리부
MainClass m = new MainClass();

try {
	m.firstMethod();
} catch (Exception e) {
	e.printStackTrace();
}
//넘김
public void firstMethod() throws Exception { //호출한 곳으로 넘김
    secondMethod();
}

//예외 발생하는 부분
public void secondMethod() throws Exception { //firstMethod 로 넘김
    int num = 10 / 0;
}
728x90
반응형

'개발자 :-) > Java' 카테고리의 다른 글

[Java] Collection  (0) 2022.09.04
[Java] 문자열 클래스  (0) 2022.09.04
[Java] 람다식  (0) 2022.09.04
[Java] 추상클래스  (0) 2022.09.03
[Java] 인터페이스  (0) 2022.09.03

댓글