ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 예외 처리하기 try - catch 문
    백엔드/자바 2020. 8. 11. 02:58

    예외 처리하는 이유

    예외는 프로그래머가 처리해서 비정상적 종료를 막고 정상적인 실행상태 유지를 위해 꼭 필요하다.

     

    try - catch 문의 구조는 다음과 같다.

     

    try를 쓰고 대괄호 안에 예외가 일어날 수 있는 문장을 삽입한다.

     

    catch에는 예외가 발생하면 대신 처리할 문장을 입력하면 된다.

     

    try는 한번이지만, catch는 여러번 중첩해서도 사용이 가능하다.

     

     
      try {

      예외가 발생할 수 있는 문장 삽입  

      } catch ( 일어날 수 있는 예상되는 예외 + 참조변수) {

      괄호 안의 예외가 발생하면 대신 이를 처리할 문장 입력

      }
     

     

    public static void main(String[] args)
    
    	try {  // try + { 예외가 날 수 있는 문장 대괄호 안에 입력 }
        
        	int result;
            
            for(int i = 0; i < 10; i++) {
            
            result = 100 / (int)(Math.random()*10);  //  랜덤으로 0~10까지 인쇄. 0나오면 예외남.
            
            System.out.println(result);
            
            }} catch (ArithmeticException A) {  // 0이 수를 나누면 ArithmeticException 예외남
            
            System.out.println("0으로 나눌 수 없습니다.");  // 예외 대신 실행될 문장 입력
            
            }
        }

     

    try - catch의 흐름

    ◎ try 문장 내에서 예외가 있을 경우

    - catch 블럭의 예외 중 try에서 발생한 예외와 같은 예외가 있는지 확인

    - 해당 catch의 실행

    - try - catch 블럭을 빠져나와서 남은 문장을 실행

    - 만약 try의 예외와 동일한 예외가 catch 블럭 내에 없으면 예외는 처리되지 못한다.

     

    ◎ try 문장 내에서 예외가 없을 경우

    - catch 블럭을 거치지 않고 try 안의 모든 문장을 실행

     

    만능 예외 문장 Exception

    catch의 경우 시작할 때 'catch ( 예상 예외 메시지 ) { }'같은 구조로 진행되는데 모든 예외 클래수는 Exception 클래스의 자손이다.

     

    그러므로 괄호 안에 'Exception'을 입력하면 어떤 예외든 catch 블럭 내에서 처리가 가능하다.

     

    예외 메시지 출력

    try 안에서 예외가 떴을 경우 catch 블럭 내에서 처리하는 것으로 되어 있다.

     

    하지만 런타임 도중 예외 메시지를 보여주고 싶을 경우도 있다.

     

    이럴 때는 catch 블럭 안에 printStackTrace()getMessage()가 있다.

     

    printStackTrace( ) : 예외 발생 당시 호출 스택에 있던 메서드의 정보와 예외 메시지를 화면에 출력한다.

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

     

    멀티 catch 블럭

    아래와 같이 catch를 여러 번 써줄 경우 문장이 복잡해진다.

     

    public static void main(String[] args) {
    		
        try { 실행문
        } catch ( 예외1 ) { 대체 문장
        } catch ( 예외2 ) { 대체 문장
        } catch ( 예외3 ) { 대체 문장
        }
            
    	}

     

    그때는 아래와 같이 간단하게 catch를 적어줄 수 있다.  ' | ' 표시를 기준으로 한 줄에 예외를 한 번에 적으면 된다.

     

    단, 두 예외 클래스가 조상과 자손 관계라면 조상클래스만 써줘도 된다는 의미로 에러가 난다.

     

    public static void main(String[] args) {
    
        try { 실행문
        } catch ( 예외1 | 예외2 | 예외3 ) {
        대체 문장;
        }
            
    	}

    '백엔드 > 자바' 카테고리의 다른 글

    예외 선언하기  (0) 2020.08.11
    예외 일으키기  (0) 2020.08.11
    오류와 예외(Error, exception)  (0) 2020.08.11
    익명 클래스(anonymous class)  (0) 2020.08.11
    추상클래스, 인터페이스와 다형성  (0) 2020.08.07
Designed by Tistory.