2014-12-15 1 views
1

Java에서이 예제의 경우 실제로 예외가 발생하지 않는데 왜 예외를 throw해야합니까?Java - 필요 잡기 예외 필요 잡기 또는 던지기

import java.io.*; 

public class Files{ 
    public static void main(String[] args) throws IOException //Why does exception need to be thrown 
    { 
     FileOutputStream os = new FileOutputStream("myfile"); 
     os.close(); 
    } 

왜 Java에서 필요합니까?

답변

3

new FileOutputStream()이이 예외를 throw 할 수 있기 때문에이를 버려야합니다. Specifying the Exceptions Thrown by a Method을 참조하십시오. 대신 메소드가 예외를 던질 필요없이 다른 방법으로, 당신은 또한 try...catch와 서라운드 수 :

try { 
    FileOutputStream os = new FileOutputStream("myfile"); 
    os.close(); 
catch (IOException e) { 
    e.printStackTrace(); 
} 
2

당신이 FileOutputStream에 대한 오라클의 문서를 선택하면, 당신은이를 볼 수 있습니다

예외 : FileNotFoundException이를 - 경우 파일이 있지만 일반 파일이 아닌 디렉토리이며 존재하지 않지만 작성할 수 없거나 을 다른 이유로 열 수 없습니다. SecurityException - 보안 관리자가 존재하고 checkWrite 메소드가 쓰기 액세스를 거부하는 경우 파일.

이것은 FileOutputStream os = new FileOutputStream("myfile"); 생성자를 호출하기위한 것입니다. 따라서 컴파일러에서 IOException을 명시 적으로 확인하도록 요청하는 이유입니다.

close() 방법에도 동일하게 적용됩니다.

1

생성자

FileOutputStream("myfile"); 

IOException 연장 FileNotFoundException을 던진다. 이므로 IOException 또는 FileNotFoundException을 던질 수 있으며 같은 것입니다. 같은 이유로 Exception도 던질 수 있습니다.

2

아래의 두 행은 모두 체크 예외를 던집니다. Java 당 처리해야하거나 호출자가 수행해야 할 것을 결정할 수 있도록 선언해야합니다.

이 경우 첫 번째 행은 FileNotFoundException을 던집니다. 나중에 어디에서 나중에 IOException을 던집니다. IOException은 FileNotFoundException의 부모이므로 IOException 만 선언 할 수 있습니다.