2016-10-23 4 views
1

Ich bin daran interessiert zu wissen, Best Practice throw new Exception() und new Exception() zu verwenden. Im Fall der Verwendung von new Exception() habe ich gesehen, dass der Code zur nächsten Anweisung übergeht, anstatt eine Ausnahme auszulösen.Unterschied zwischen "neue Exception werfen" und "neue Exception"?

Aber mir wurde gesagt, dass wir new Exception() verwenden sollten, um RuntimeException zu werfen.

Kann jemand etwas Licht darauf werfen?

+0

new Exception bedeutet eine Instanz erstellen (wie neu Int Eger (...)) aber keine Ausnahme wird passieren, bis Sie es werfen ... –

+0

"Mir wurde gesagt, dass wir neue Exception() verwenden sollten, um RuntimeException" von wem zu werfen? woher? Mit welchen Argumenten? 'new Exception()' wirft die instanziierte Ausnahme nicht. – davmac

Antwort

1

new Exception() Mittel eine Instanz (das gleiche wie die Schaffung neuer Integer (...)) erstellen aber keine Ausnahme passieren wird, bis Sie sie werfen ...

folgenden Ausschnitt Betrachten:

public static void main(String[] args) throws Exception { 
    foo(1); 
    foo2(1); 
    } 

    private static void foo2(final int number) throws Exception { 
    Exception ex; 
    if (number < 0) { 
     ex = new Exception("No negative number please!"); 
     // throw ex; //nothing happens until you throw it 
    } 

    } 

    private static void foo(final int number) throws Exception { 
    if (number < 0) { 
     throw new Exception("No negative number please!"); 
    } 

    } 

die method foo() wird THROW eine Ausnahme, wenn der Parameter negativ ist, aber die Methode foo2() wird eine Ausnahme erstellen, wenn der Parameter negativ ist

0
Exception e = new Exception(); 

Erstellt nur eine neue Ausnahme, die Sie später werfen konnten. Mit

throw e; 

Während

throw new Exception() 

Erstellt und wirft die Ausnahme in einer Zeile

zu erstellen und eine Laufzeitausnahme

throw new RuntimeException() 
0

new Exception() bedeutet, Sie erstellen eine neue Instanz werfen von Ausnahmetyp. Dies bedeutet, dass Sie nur ein Objekt ähnlich wie andere Instanzen wie new String("abc") instanziieren. Sie würden dies tun, wenn Sie eine Ausnahme des Typs Exception in den nächsten Zeilen der Codeausführung auslösen möchten.

Während Sie sagen, throw new Exception() bedeutet dies, dass Sie sagen, verschieben Sie das Programm Steuerelement auf Aufrufer und führen Sie nicht die weiteren Anweisungen nach dieser throw-Anweisung.

Sie würden dies in einer Situation tun, in der Sie feststellen, dass es keine Möglichkeit gibt, weiterzugehen und weiter auszuführen und somit Anrufer wissen zu lassen, dass ich mit diesem Fall nicht umgehen kann und wenn Sie wissen, wie Sie mit diesem Fall umgehen damit.

Es gibt keine Best Practice als solche, wie Sie Orangen mit Äpfeln vergleichen. Aber denken Sie daran, wenn Sie eine Ausnahme werfen, werfen Sie immer eine sinnvolle Ausnahme wie IO, wo, wenn die Datei nicht vorhanden ist, es FileNotFoundException statt seines Elternteils IOException wirft.

Verwandte Themen