Java Eccezioni: eccezione myException non è mai gettato nel corpo del corrispondente try
Domanda
Capisco l'idea di questo errore. Ma credo che non capisco come funziona questo giù lo stack di chiamate.
File Main.java:
public static void main(String[] args) {
try {
Function1();
} catch (myException e) {
System.out.println(e.getMessage());
}
}
public static void Function1() {
Function2();
}
Function2 esiste in un altro file:
File2.java
public void Function2() throws myException {
....
}
Così, attraverso diverse chiamate (verso il basso lo stack delle chiamate) Ho Function2 che specifica il requisito "getta myException". Come mai la funzione principale (dove l'errore è diretto a) non riconosce che butto myException su tutta la linea?
Qualsiasi orientamento in cui il 'buco' nelle mie bugie "knowledge eccezione" sarebbe molto apprezzato.
aitee,
Soluzione
Il buco è che Function2
dichiara che genera l'eccezione, ma Function1
non lo fa. Java non scavare la sua strada attraverso le possibili gerarchie di chiamata, ma va direttamente da ciò che si dichiara nelle dichiarazioni throws
.
Function1
si allontana con non dichiarando il tiro probabilmente perché myException
è un RuntimeException
.
Altri suggerimenti
Il problema è che Function1()
non dichiara che throws myException
- il che significa che ci dovrebbe essere 2 errori di compilazione:. Uno circa l'eccezione non essere catturati o dichiarate, e uno per la cattura l'eccezione che non viene dichiarata ??p>