2017-12-15 9 views
3

Ich stieß auf diese erneute Ausnahmeregelung und bin überrascht, dass es sogar kompiliert.Unterschied zwischen "werfen (e)" und "werfen e"?

} catch(SomeException e) { 
    ... 
    throw(e); 
} 

Gibt es einen Unterschied zwischen diesem throw() und was normalerweise verwendet wird? ...

} catch(SomeException e) { 
    ... 
    throw e; 
} 

Alle Links zu denen dies dokumentiert ist oder Führung auf der einen über die andere Wahl?

+4

Sie sind die gleichen –

+1

Sieht aus wie es nur überflüssige Gruppierung Klammern ist. – Carcigenicate

+0

Beachten Sie, dass Sie nicht protokollieren und werfen sollten. Wenn Sie es woanders fangen und es auch dort aufzeichnen, bekommen Sie den falschen Eindruck, dass es zwei Ausnahmen gibt. –

Antwort

9

Viele Sprachen erlauben so viele Klammern um Ausdrücke wie Sie möchten. Java ist einer von ihnen. Folgendes ist ein absolut gültiger Code.

public class HelloWorld { 
    public static void main(String[] args) { 
    throw ((((new RuntimeException())))); 
    } 
} 

Es gibt also absolut keinen Unterschied, außer dass Ihre Quelldatei zwei Bytes größer ist.

+2

"Es gibt also keinen Unterschied, außer dass die Quelldatei zwei Bytes größer ist." Und viel weniger lesbar. – davidxxx

6

Funktional sind sie gleichwertig.

Wählen Sie jedoch nicht throw(e);, da jemand könnte es für einen Methodenaufruf zu verwechseln, und das Allerwenigste wird jemand unnötigerweise fragen, was es ist, dass Sie tun. Bevorzugen Sie die normale throw e; Syntax für Klarheit. Es ist das gleiche

+2

Rechts. Unnötige Klammern, die weder funktional erforderlich noch lesbar sind, sind fehleranfällig und toten Codes. – davidxxx

0

Wurf ist eine Anweisung, eine "throwable" (in der Regel eine Ausnahme)

wenn es

Public int get value() { 
    return 3; 
} 

Ist equlivilant von

Public int get value() { 
    return (3); 
} 

wie eine return-Anweisung Denken

zu werfen mit umwerfbar.

In Anbetracht werden sie genau das gleiche erfüllen.

Verwandte Themen