2011-12-02 4 views
3

인스턴스 초기화 프로그램이 개체 초기화의 일부이고 개발자가이 프로세스를 제어 할 수 없어 예외를 throw 할 수 없다는 사실을 매우 분명히 알았습니다. This post도 같은 생각입니다.인스턴스 이니셜 라이저에서 예외를 throw 할 수 있습니까?

는 그러나, 나는 자바에있는 개체 초기화에 대한 빌 베너 스의 글을 읽고, 아래 인용 한 단락이 : 반환하지 않을 수 있습니다 인스턴스 초기화 내부

코드. 익명 내부 클래스의 경우를 제외하고 인스턴스 초기화 프로그램은 클래스의 모든 생성자의 throws 절에 명시 적으로 선언 된 예외가 선언 된 경우에만 확인 예외를 throw 할 수 있습니다. 반면 익명의 내부 클래스에있는 인스턴스 이니셜 라이저는 예외를 throw 할 수 있습니다. 원래 게시물은 here을 클릭하십시오.

인스턴스 초기화 프로그램이 예외를 throw 할 수 있습니다. 아무도 내게 이것을 설명 할 수 없거나 나의 이해가 정확하지 않으면 나를 바로 잡을 수 있습니까?

답변

2

인스턴스 초기화 프로그램은 확인 된 예외를 throw 할 수 있지만 예외가 발생하면 클래스 생성자가 예외를 선언해야합니다. 예를 들어,이 코드는 합법적이다 : 다른 생성자이 컴파일되지 것 절을하지 않았다 추가 된 경우

import java.io.*; 

public class MyClass { 

    PrintStream stream; 

    { 
     stream = new PrintStream("/tmp/file.txt"); 
    } 

    public MyClass() throws FileNotFoundException { 
    } 

} 

하는 경우는, 그러나, throws 절을 PrintStream 때문에, 생성자에서 생략, 또는 한 생성자가 FileNotFoundException을 던졌습니다.

+1

답변에 따라 인스턴스 초기화 프로그램은 클래스 생성자 제한없이 검사되지 않은 예외를 throw 할 수 있습니다. – emory

+0

고마워, 알았다. – Hong

관련 문제