2014-03-06 4 views
6

Wie werfen Sie mehr als eine Ausnahme gleichzeitig von einer Methode? Beispiel:Mehrere Ausnahmen von einer Methode werfen

public void doA() throws Exception1, Exception2{ 
    throw new Exception1("test1"); 
    throw new Exception2("test2"); 
} 

Wie kann man so etwas machen?

Edit: eine Bedingung löst Exception1 und Exception2 aus. Möglich? Dies ist nur eine Demo-Datei zum Testen von Ausnahmen.

+0

Was soll es erreichen? –

Antwort

9

Sie sollten überprüfen, ob etwas in der Methode nicht richtig ist, die Exception zu werfen. Hier ist ein Beispiel:

public void doA() throws Exception1, Exception2 { 
    if (<some unexpected condition>) { 
     throw new Exception1("test1"); 
    } 
    if (<another unexpected condition>) { 
     throw new Exception2("test2"); 
    } 
    //rest of the implementation... 
} 

Wenn Sie meinen, wie mehrere Ausnahmen zur gleichen Zeit werfen, das ist nicht möglich, da eine Ausnahme warf die Durchführung des Verfahrens (ähnlich ein return) brechen. Sie können immer nur eine Exception gleichzeitig werfen.

+0

@ downvoter Pflege zu erklären? –

+1

Das ist nicht das, was das OP gefragt hat, nur ein zufälliger Ratschlag. – Warlord

+0

@Warlord aus der OP-Frage: * Eine Bedingung löst Exception1 und Exception2 aus. Möglich?*. –

0

Wenn Ihre Frage war, wie können Sie mehr als eine Ausnahme von einer Methode gleichzeitig werfen, dann ist die Antwort Sie können einfach nicht. Nachdem die erste Ausnahme ausgelöst wurde, beendet das Steuerelement diese Methode und die Ausnahme wird in der übergeordneten Methode ausgeführt. Wenn es nichts gibt, das es fängt, dann geht es zu seiner Elternmethode und so weiter ...

0

Ich denke nicht, dass es möglich ist, mehr als eine Ausnahme sofort zu werfen.

jedoch je nach Anforderung können Sie eine verschachtelte Ausnahme auslösen, wenn Sie kontextuell das (sic) zweite Ausnahme übergeben müssen:

throw new Exception("My exception", new Exception("The cause of My Exception")); 
0

Wurf Ausnahme ist ein One-Way-Übertragung der Kontrolle auf ein anderes Codezeile (wie Sprung in der Assemblersprache). Das bedeutet, dass das Programm nach der WOW-Anweisung notwendigerweise eine andere Codezeile außerhalb dieses Bereichs ausführen muss (zuerst Code im Stack aufrufen, der diese Ausnahme behandelt).

1

Sie können jeweils nur eine Ausnahme auslösen. Sie können nicht tun, wonach Sie fragen. Stattdessen denken über benutzerdefinierte Ausnahmen in Ihrem Code verwenden, und verwenden Sie sie, abhängig von der Situation (ich bin mir nicht sicher über den Grund, warum Sie zwei Ausnahmen werfen müssen):

class CustomException extends Exception 
{ 
    //Parameterless Constructor 
    public CustomException() {} 

    //Constructor that accepts a message 
    public CustomException(String message) 
    { 
    super(message); 
    } 
} 

und es dann aus, wenn Sie brauchen zu:

public void doA() throws Exception1, Exception2{ 
    throw new CustomException("test1, test2"); 
}