Według JLS: jest to błąd podczas kompilacji, jeśli inicjator zmiennej instancji lub inicjalizator instancji klasy o podanej nazwie może rzucić zaznaczoną klasę wyjątków, chyba że ta klasa wyjątków lub jedna z jej nadklas jest jawnie zadeklarowana w klauzuli throws każdego konstruktora swojej klasy i klasa ma co najmniej jeden jawnie zadeklarowany konstruktor.Sprawdzany blok wyjątku i inicjalizatora
Więc jeśli mogę to zrobić -
class A{
{
throw new FileNotFoundException();
}
public A() throws IOException{
// TODO Auto-generated constructor stub
}
}
Daje to błąd czasu kompilacji „inicjator musi wypełnić normalnie”
podczas
class A{
{
File f=new File("a");
FileOutputStream fo=new FileOutputStream(f);
fo.write(3);
}
public A() throws IOException{
// TODO Auto-generated constructor stub
}
}
Kod ten nie wykazuje żadnego czasu kompilacji błąd. Dlaczego poprzedni kod nie kompiluje się, nawet jeśli zadeklarowałem klauzulę throws w konstruktorze?
Powiedzieliście blokowi inicjalizatora, aby rzucił nieuwarunkowany wyjątek, czego jeszcze można się spodziewać? – skuntsel