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,

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top