In base a JLS: è un errore in fase di compilazione se un inizializzatore di variabili di istanza o un inizializzatore di istanza di una classe denominata può generare una classe di eccezioni verificata, a meno che tale classe di eccezioni o una delle sue superclassi non sia dichiarata esplicitamente nella clausola throws di ogni costruttore della sua classe e la classe ha almeno un costruttore dichiarato esplicitamente.Blocco di inizializzazione e inizializzazione selezionato
Quindi, se faccio questo -
class A{
{
throw new FileNotFoundException();
}
public A() throws IOException{
// TODO Auto-generated constructor stub
}
}
Questo dà un errore di compilazione "di inizializzazione deve completare normalmente"
mentre
class A{
{
File f=new File("a");
FileOutputStream fo=new FileOutputStream(f);
fo.write(3);
}
public A() throws IOException{
// TODO Auto-generated constructor stub
}
}
Questo codice non mostra alcuna fase di compilazione errore. Perché il codice precedente non viene compilato anche se ho dichiarato una clausola throws nel costruttore?
Hai detto al blocco di inizializzazione di generare un'eccezione incondizionata, cos'altro ti aspetti? – skuntsel