Wofür finally? < Java < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 17:23 Mo 21.07.2008 | Autor: | Lay-C |
Hallo,
da ich am Freitag ne Java Klausur schreibe und mir keiner die Frage beantworten konnte frag ich hier nochmal:
Wofür braucht man nach einem try-catch-Block das finally?
Da es sowohl bei einer Exception als auch ohne Exception aufgerufen wird finde ich keinen Sinn darin.
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 17:46 Mo 21.07.2008 | Autor: | piet.t |
Hallo,
wenn auch der Code-Block nach dem try-catch-finally garantiert ausgeführt wird, dann kann man sich das finally auch sparen. Das muss allerdings nicht unbednigt der Fall sein. Mal ein ganz grobes Beispiel:
1: | FileInputStream is;
| 2: | try {
| 3: | is = new FileInputStream(new File("C:/file.txt"));
| 4: | //hier kommt noch was....
| 5: | } catch (FileNotFoundException e) {
| 6: | throw new RuntimeException(e);
| 7: | } finally {
| 8: | is.close();
| 9: | }
|
Die FileNotFoundException wird hier also einfach in eine RuntimeException verpackt und weitergeworfen - der Code nach dem try-catch-finally wird im Exception-Fall also nicht ausgeführt, der finally-Block aber schon, so dass der InputStream sicher geschlossen wird. "finally" garantiert also wirklich die Ausführung des enthaltenen codes - auch wenn im try- oder catch-Block Ausnahmen gweorfen werden, die nicht gefangen werden oder wenn in einem dieser Blöcke ein return-Statement ausgeführt wird.
Macht es das etwas klarer?
Gruß
piet
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 17:53 Mo 21.07.2008 | Autor: | Lay-C |
Ok ich habs einigermaßen verstanden un auch nochmal in der api nachgelesen... jetzt isses klar ^^
|
|
|
|