본문 바로가기
Backend/JAVA

[JAVA] 예외처리 Exception : try - catch문, finally, throws

by howdyoon 2023. 3. 21.

컴파일 에러 : 컴파일 시에 발생하는 에러

런타임 에러 : 실행 시에 발생하는 에러

논리적 에러 : 실행은 되지만, 의도와 다르게 동작하는 것

 

에러(error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류

예외(exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류

 

예외처리(Exception handling)

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

목적 : 프로그램의 비정상 종료를 막고 정상적인 실행상태를 유지하는 것

 

[ try - catch문 ]

- 형식
try {
        // 예외가 발생할 가능성이 있는 문장들을 넣는다
    }catch (Exception e1) {
        // Exception1이 발생했을 경우 이를 처리하기 위한 문장을 적는다
    }catch (Exception e2) {
        // Exception2이 발생했을 경우 이를 처리하기 위한 문장을 적는다
    }catch (Exception e3) {
        // Exception3이 발생했을 경우 이를 처리하기 위한 문장을 적는다
    }
    //1) 예외처리 하지 않은 경우
    System.out.println(1);
    //Exception이 발생되면 프로그램은 정상적으로 종료되지 않음
    System.out.println(3/0);//ArithmeticException 발생
    System.out.println(5);
    System.out.println("END");

    //2) 예외처리를 한 경우
    //->Exception이 발생하더라도 정상적으로 프로그램은 종료시킬 수 있다
    try {
        //예외 발생이 예상되는 코드 작성
        System.out.println(1);
        System.out.println(3/0);
        System.out.println(5);

    } catch(ArithmeticException e) {
        //예외가 발생되었을 때 처리할 코드 작성
        System.out.println(e);
    }//end

    System.out.println("END");


    //3)
    try {
        System.out.println(1);
        int[] num=new int[3];
        num[5]=7;
        System.out.println(9);
    }catch (ArrayIndexOutOfBoundsException e) {
        e.printStackTrace();
    }//end

    System.out.println("END");


    //4)
    try {
        System.out.println(1);
        int num=Integer.parseInt("KOREA");
        System.out.println(num);
        System.out.println(3);
    }catch (NumberFormatException e) {
        System.out.println(e);
    }//end

    System.out.println("END");


    //5) 
    try {
        System.out.println(1);
        Integer inte=null;
        System.out.println(5/inte);
    }catch (NullPointerException e) {
        System.out.println(e); 
    }//end

    System.out.println("END");


    //6)다중 catch문
    try {
        int a=2/0;
        int b=Integer.parseInt("KOREA");
        int[] num=new int[3];
        num[5]=7;
    }catch (ArithmeticException e) {
        System.out.println(e);
    }catch (NumberFormatException e) {
        System.out.println(e);
    }catch (ArrayIndexOutOfBoundsException e) {
        System.out.println(e);
    }catch (NullPointerException e) {
        System.out.println(e);
    }//end	

    System.out.println("END");


    //7)
    try {
        int a=2/0;
        int b=Integer.parseInt("KOREA");
        int[] num=new int[3];
        num[5]=7;
    }catch (Exception e) {//다형성
        //Exception 클래스 : 모든 예외 발생의 조상 클래스
        System.out.println(e);
    }//end

    System.out.println("END");

[ finally ]

예외의 발생여부 상관없이 실행되어야할 코드를 포함시킬 목적으로 사용된다

- 형식
try {
        // 예외가 발생할 가능성이 있는 문장들을 넣는다
    }catch (Exception e1) {
        // 예외처리를 위한 문장을 넣는다
    }finally {
        // 예외의 발생여부에 관계없이 항상 수행되어야하는 문장들을 넣는다
        // finally블럭은 try-catch문의 맨 마지막에 위치해야 한다
    }
    
 - 적용
 try {
        System.out.println("OPEN");
        System.out.println(1/0);
    }catch (Exception e) {
        System.out.println(e);
    }finally {
        System.out.println("CLOSE");
    }//end

    System.out.println("END");

[ throws문 ]

하나의 예외에 대해서 예외가 바랭한 메소드와 이를 호출한 메소드 양쪽 모두에서 처리해줘야 할 작업이 있을 때 사용된다

주의 : 예외가 발생할 메소드에서는 try-catch문을 사용해서 예외처리를 해줌과 동시에 메소드의 선언부에 발생할 예외를 throws에 지정해줘야 한다

package oop0321;

class Test {
	
	public void view() throws Exception {
		int a=3/0;
	}//view() end
	
	public void disp() throws NullPointerException, NumberFormatException {
		int a=Integer.parseInt("KOREA");
	}//disp() end
 
}//class end

public class Test08_throws {

	public static void main(String[] args) {
		//throws문
		//->메소드 호출시 예외처리를 한꺼번에 모아서 처리
		
		try {
			Test test=new Test();
			//test.view();
			test.disp();
		}catch (Exception e) {
			System.out.println(e);
		}//end

	}//main() end
}//class end

 

 

 

 

 

'Backend > JAVA' 카테고리의 다른 글

[JAVA] Generics  (0) 2023.03.26
[JAVA] List, Set, Map 인터페이스  (0) 2023.03.26
[JAVA] 내부클래스 inner class  (0) 2023.03.21
[JAVA] 익명 내부 객체 Anonymous class  (0) 2023.03.21
[JAVA] interface  (0) 2023.03.21