2016-05-04 12 views
-1

Lassen Sie mich sagen, dass ich eine Ausnahme in einer Methode Signatur auslösen - Ausnahme wie IOException.werfen IOException in einer Methodensignatur

Ich weiß, dass ich nicht endlich Bereich innerhalb der Methode verwenden kann, um die Streams, die ich bereits erstellt habe, zu schließen, weil ich nicht versuchen und fangen in meinem Code. also was stellen Sie sicher, dass diese Streams in meinem Programm nahe sein werden?

Danke!

+3

Warum denken Sie, dass 'throw IOException' die Verwendung von' finally' in dieser Methode ausschließt? –

+2

Sie können 'finally' ohne' catch' verwenden. – Tunaki

+0

Auch: https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html –

Antwort

0

Sie müssen keinen catch Block haben, wenn Sie try verwenden; Sie können auch einfach einen finally Block haben. Ausnahmen, die in den Block try geworfen werden, werden dann aus der Methode entfernt, aber der Block finally wird immer noch ausgeführt, wenn eine Ausnahme auftritt.

public void myMethod() throws IOException { 
    InputStream in = new FileInputStream("..."); 
    try { 
     // Do stuff that might throw IOException 
    } finally { 
     in.close(); 
    } 
} 

Es ist jedoch viel besser, die try-with-resources Konstruktion zu verwenden (eine neue Funktion seit Java 7):

public void myMethod() throws IOException { 
    try (InputStream in = new FileInputStream("...")) { 
     // Do stuff that might throw IOException 
    } 
} 

Sie müssen die InputStream nicht explizit schließen, wenn Sie dies tun; Es wird automatisch passieren (ob eine Ausnahme aufgetreten ist oder nicht).

(Ein Problem mit dem ersten Ansatz ist auch, dass in.close(); könnte auch eine IOException werfen, und das Auslösen von Ausnahmen von einem finally Block ist im Allgemeinen eine schlechte Idee).

Verwandte Themen