Domanda

Perché non si genera un InterruptedException nel seguente modo:

try {
    System.in.wait(5) //Just an example
} catch (InterruptedException exception) {
    exception.printStackTrace();
 //On this next line I am confused as to why it will not let me throw the exception
    throw exception;
}

Sono andato a http://java24hours.com , ma non mi ha detto perché non ho potuto buttare un InterruptedException.
Se qualcuno sa perché, mi dica! Sono disperato! : S

È stato utile?

Soluzione

È possibile solo buttare se il metodo si sta scrivendo dichiara che si getta InterruptedException (o di una classe base).

Ad esempio:

public void valid() throws InterruptedException {
  try {
    System.in.wait(5) //Just an example
  } catch (InterruptedException exception) {
    exception.printStackTrace();
    throw exception;
  }
}

// Note the lack of a "throws" clause.
public void invalid() {
  try {
    System.in.wait(5) //Just an example
  } catch (InterruptedException exception) {
    exception.printStackTrace();
    throw exception;
  }
}

Si dovrebbe leggere su eccezioni controllate per maggiori dettagli.

(Detto questo, chiamando wait() su System.in quasi certamente non sta facendo quello che ci si aspetta che ...)

Altri suggerimenti

Ci sono due tipi di eccezioni in Java:. controllato e incontrollato eccezioni

Per eccezioni controllate, i controlli del compilatore se le maniglie programmarli, avviene mediante la cattura o specificando (con una clausola throws) che il metodo in cui l'eccezione potrebbe accadere, che il metodo potrebbe gettare quel tipo di eccezione.

classi di eccezione che sono sottoclassi di java.lang.RuntimeException (e RuntimeException stesso) sono eccezioni unchecked. Per tali eccezioni, il compilatore non fare il check - in modo non è necessario per la cattura di loro o per specificare che li si potrebbe gettare

.

Classe InterruptedException è un eccezione controllata, quindi è necessario È possibile prenderlo o dichiarare che il metodo potrebbe gettarlo. Si sta gettando l'eccezione dal blocco catch, quindi è necessario specificare che il metodo potrebbe gettarlo:

public void invalid() throws InterruptedException {
    // ...

classi di eccezione che si estendono java.lang.Exception (tranne RuntimeException e sottoclassi) vengono controllati eccezioni.

Java Tutorial See Sun sulle eccezioni informazioni dettagliate.

InterruptedException non è una RuntimeException quindi deve essere catturato o controllata (con una clausola throws sulla firma del metodo). È possibile lanciare solo un RuntimeException e non essere costretti dal compilatore di catturarlo.

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