2010-05-02 3 views
-1

IOException이 확인 된 예외이며 catch 블록 내의 다른 try 블록에 의해 catch되지 않으므로 catch 블록의 throw 문으로 인해 다음 프로그램에서 컴파일 오류가 예상됩니다. . 하지만 나는 "만세!"하고있다. 인쇄. 어떤 설명이라도 대단히 감사하겠습니다.catch 절의 컴파일 오류에서 Java 확정 예외

을 : 방법 또는 생성자 몸이 모두 보류 다음과 같은 경우 일부 예외 타입 E를 던질 수 있다면 그것은 컴파일 타임 오류가 http://java.sun.com/docs/books/jls/third_edition/html/exceptions.html

JLS 11.2.3에 따르면

,

* E is a checked exception type 
* E is not a subtype of some type declared in the throws clause of the 

메서드 또는 생성자. 사전에

import java.io.*; 
public class Test{ 
    public static void main(String args[]) 
    { 


     System.out.println(method()); 
    } 
    public static int method() 
    { 


     try{ 
      throw new Exception(); 
     } 
     catch(Exception e){ 

      throw new IOException(); //No compile time error 
     } 
     finally{ 

        System.out.println("Hurray!"); 

     } 
    } 
} 

감사합니다.

답변

-1

Eclipse의 내장 Java 컴파일러를 사용하면 컴파일 오류가 발생합니다.

JDK 6.0 컴파일러와 동일합니다.

컴파일 오류가없는 Java 버전을 사용하고 있습니까?

+0

이상한! 나는 일식 갈릴레오도 사용하고있다. 컴파일 오류가 없습니다. – srandpersonia

+0

jdk 6 업데이트 14를 사용하고 있습니다. – srandpersonia

+0

Phew! 새 클래스 파일을 만들고 SO에서 붙여 넣기를 복사 한 후에 가져 왔습니다. IOException으로 변경하기 전에 Exception을 사용하고 자동 빌드가 수행되지 않았기 때문에 필자가 그랬어야한다고 가정합니다. 답장과 시간을 보내 주셔서 감사합니다. – srandpersonia

-1

어쩌면 내가 누락되었지만 프로그램에서 throws clause은 어디에 있습니까?

이제 method()에 나타나는 소스 코드에는 메서드 헤더에 throws 절이 없으며 단지 명령문을 throw합니다. JLS의 인용문은 명시 적으로 throws 절을 참조합니다.

+0

다른 답장에 대해 언급하면서 빌드를 강요하지 않는 것은 내 실수였습니다. 죄송합니다, 시간 내 주셔서 감사합니다. – srandpersonia