2012-04-01 17 views
9

Ist es als schlechte Programmierung, einen Versuch zu versuchen und fangen in einer finally-Klausel?versuchen fangen endlich Abschnitt

Ich habe in meiner Hauptmethode einen FileInputStream, den ich schließen möchte. Ich möchte die .close() in die endgültige platzieren, damit es egal was schließt. Ich möchte der Hauptmethode keine throws-Deklaration hinzufügen, da dies die Hauptmethode ist: P

}finally{ 
     try { 
      commandFile.close(); 
     } catch (IOException e) { 
      throwException(e); 
     } 
    } 

ist es ok? Danke

+8

Ja, das ist in Ordnung und ist manchmal notwendig. –

+1

Wenn Sie nur die Ausnahme erneut auslösen möchten, brauchen Sie den Versuch nicht zu fangen. Der try-catch ist notwendig, weil man etwas mit der Ausnahme machen soll (auf das Minimum, Logging), wenn man sich nicht entscheidet, dann ist es nicht notwendig. – SJuan76

+0

Ich muss etwas zu System.err und dann System.exit drucken Das ist, was die throwExcpetion (e) -Methode tut –

Antwort

9

Das Muster der Notwendigkeit try/catches in endlich Methoden ist leider ein wiederkehrendes Muster in Java 6 und vorher. Ich würde behaupten, dass es tatsächlich eine schlechte Übung ist, aber keine, die Sie in Java 6 wirklich vermeiden können (siehe unten für Java 7).

Ein zusätzliches Problem besteht darin, dass alle neuen Ausnahmen, die im finally-Block ausgelöst werden, Ausnahmen außer Kraft setzen, die ausgelöst wurden, bevor dieser Block erreicht wurde.

In Java 7 gibt es speziell für die Fälle, in denen Ressourcen geschlossen werden müssen (die meisten Anwendungsfälle für try/finally/try/catch-Konstrukte), das neue try-with-resources-Konstrukt. Dadurch werden auch die primären und sekundären Ausnahmen erfasst.

dieses Konstrukt ist also jetzt eine bewährte Methode in JDK 7 und ja, der Code, den Sie zeigen, ist somit eine schlechte Praxis in Java 7.

+0

Ich bin verpflichtet, nur Java 6 zu verwenden. Die Schule hat 7 noch nicht genehmigt. –