본문 바로가기
STUDY/JAVA

예외처리2

by NOTEEE 2018. 1. 22.

throw, throws


예제를 보자.


현재 소스

class B{
    void run(){
        BufferedReader bReader = null;
        String input = null;
        try {
            bReader = new BufferedReader(new FileReader("out.txt"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try{
            input = bReader.readLine();
        } catch (IOException e){
            e.printStackTrace();
        }       
        System.out.println(input); 
    }
}
class C{
    void run(){
        B b = new B();
        b.run();
    }
}
public class ThrowExceptionDemo {
    public static void main(String[] args) {
         C c = new C();
         c.run();
    }   
}
cs

 - 현재 클래스 B의 메소드 run에 try/catch문이 걸려있다.

 - 이 부분을 throws를 사용하여 상위메소드에 예외처리를 전가시킬 수 있다.



throws 적용시킨 소스

class B{
   // throws 키워드를 사용하여 상위메소드로 예외처리를 전가시키고 있다.
    void run() throws IOException, FileNotFoundException{
        BufferedReader bReader = null;
        String input = null;
        bReader = new BufferedReader(new FileReader("out.txt"));
        input = bReader.readLine();
        System.out.println(input);
    }
}
class C{
   // 클래스 C의 ㅇ메소드 run에 try/catch문을 정의하고 있다.
    void run(){
        B b = new B();
        try {
            b.run();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
public class ThrowExceptionDemo {
    public static void main(String[] args) {
         C c = new C();
         c.run();
    }   
}
cs

 - throws 키워드를 사용하여 상위메소드로 예외처리를 전가시키고 있음을 알 수 있다.

 - 상위클래스인 클래스 C에 try / catch 문이 정의 되어 있음을 알 수 있다.



throws 적용시킨 소스

class B{
    // throws 키워드를 사용하여 상위메소드로 예외처리를 전가시키고 있다.
    void run() throws IOException, FileNotFoundException{
        BufferedReader bReader = null;
        String input = null;
        bReader = new BufferedReader(new FileReader("out.txt"));
        input = bReader.readLine();
        System.out.println(input);
    }
}
class C{
    // throws 키워드를 사용하여 상위메소드로 예외처리를 전가시키고 있다.
    void run() throws IOException, FileNotFoundException{
        B b = new B();
        b.run();
    }
}
public class ThrowExceptionDemo {
    public static void main(String[] args) {
         C c = new C();
         try {
            c.run();
        } catch (FileNotFoundException e) {
            System.out.println("out.txt 파일은 설정 파일 입니다. 이 파일이 프로잭트 루트 디렉토리에 존재해야 합니다.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }   
}
cs

 - 클래스 B, C를 throws 키워드를 사용하여 상위메소드로 예외를 전가시킨 소스이다.




throw VS throws

 - throw : 억지로 현재 메소드 내에서 예외를 강제로 발생시키는 것.

 - throws : 현재 메소드에서 자신을 호출한 상위 메소드에서 에러처리에 대한 책임을 맡게 하는 것.(상위메소드로 책임을 전가시킴)

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

예외처리4  (0) 2018.01.22
예외처리3 예제  (0) 2018.01.22
finally  (0) 2018.01.22
예외처리1  (0) 2018.01.22
인터페이스와 다형성2  (0) 2018.01.22