본문 바로가기

프로그래밍/Java

Java_예외처리(1)_try-catch문

① 예외처리란? 

: 예외처리란 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것이다. 

→ 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하도록 한다.

 

 

- 에러의 종류

에러의 종류

→ 컴파일 에러 : 컴파일 시에 발생하는 에러 => 구문체크, 번역, 최적화, 생략된 코드 추가

     런타임 에러 : 실행 시에 발생하는 에러 => 프로그램 종료

     논리적 에러 : 실행은 되지만, 의도와 다르게 동작하는 것 => 프로그램 종료X

 

 

- 예외 클래스의 계층 구조

계층 구조

→ Exception클래스들 : 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외.

     RuntimeException클래스들 : 프로그래머의 실수로 발생하는 예외.

 

 

- 예외 처리하기 try-catch문

class JavaJungsuk_basic_Ex8_3 {
     public static void main(String[] args) {
     	System.out.println(1);
        System.out.println(2);
        
        try{	//예외가 발생할 가능성이 있는 문장들을 넣는다. 
            System.out.println(3);
            System.out.println(0/0);	//0으로 나눠서 고의로 ArithmethicException을 발생시킨다. 
            System.out.println(4);		//실행되지 않는다. 
        } catch(Exception e) {	//Exception이 발생했을 경우, 이를 처리하기 위한 문장을 적는다. 
            System.out.println(5);
        }
        
        System.out.println(6);
    }
}
결과
1
2
3
5
6

 에러는 어쩔 수 없지만, 예외는 프로그래머가 이에 대한 처리를 미리해주어야 한다. 

 

 

- printStackTrace()와 getMessage()

: 예외 클래스의 인스턴스에는 발생한 예외에 대한 정보가 담겨 있으며, getMessage()와 printStackTrace()를 통해서

이 정보들을 얻을 수 있다. 

printStackTrace() 예외발생 당시 호출스택에 있었던 메서드의 정보와 예외 메시지를 출력한다.
getMessage() 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있다. 

 

class JavaJungsuk_basic_Ex8_5 {
    public static void main(String[] args) {
        System.out.println(1);
        System.out.println(2);
        
        try {
            System.out.println(3);
            System.out.println(0/0);
            System.out.println(4);
        } catch (ArithmeticException ae) {
            ae.printStackTrace();
            System.out.println("예외메시지 : "+ae.getMessage());
        }
        
        System.out.println(6);
    }
}
결과
1
2
3
java.lang.ArithmeticException: / by zero
	at JavaJungsuk_basic_Ex8_5.main(JavaJungsuk_basic_Ex8_5.java:8)	//printStackTrace()
예외메시지 : / by zero	//ae.getMessage()
6

 

 

→ catch블럭의 괄호()에 선언된 참조변수를 통해 이 인스턴스에 접근할 수 있다. 

→ try-catch문에 의해 프로그램은 정상적으로 종료되었다.