2015-08-13 12 views
6

sagen, dass ich den folgenden Code haben:Sollte ich System.exit (1) verwenden, wenn eine Ausnahme zum Beenden der Anwendung auftritt?

try { 
    //Do something with File 
} catch (FileNotFoundException e) { 
    outputInfo("Error in IO Redirection", true); 
    e.printStackTrace(); 
    System.exit(1); 
} 

Mein Programm beendet direkt nach diesem Fang Lage ist, ein einzelner Thread (ein Hauptverfahren) Programm und erwarten sollte nicht von einer solchen Ausnahme zu erholen.

Sollte ich wirklichSystem.exit(1); verwenden?

+0

Die Verwendung einer Ganzzahl 1-127 in system.exit zeigt eine abnormale Beendigung eines Programms an. Wenn Sie nach dem catch-Block keine andere Operation ausführen möchten, können Sie sie verwenden oder die Ausnahme abfangen und mit der entsprechenden Fehlermeldung drucken. – Shriram

+0

Welche Alternative erwägen Sie anstelle von 'System.exit (1);'? – jaco0646

+0

Keine Alternative, ich frage mich nur, was zu denken ist, wenn ich 'System.exit (1) verwende;' und was ich verstehen sollte, könnte schief gehen, wenn ich dies in all meinen Ausnahmebehandlungsfängen benutze. – insidesin

Antwort

4

Wenn Sie jemand anderes erwarten, dass Ihr Programm auszuführen, und sie verlassen sich auf den Prozess-Statuscode zu wissen, ob Ihr Programm erfolgreich war oder fehlgeschlagen ist, dann sollten Sie System.exit(1); verwenden

http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#exit%28int%29

Bricht die Derzeit wird Java Virtual Machine ausgeführt. Das Argument dient als Statuscode; Per Konvention gibt ein Nicht-Null-Statuscode eine abnormale Beendigung an.

+0

Was ist, wenn Ihr Programm auch eine finally-Klausel verwendet? 'System.exit (1)' wird sich definitiv störend auswirken, bedeutet das, dass Sie eventuell den abschließenden Code kopieren müssen, bevor Sie den Exit aufrufen? – insidesin

+0

Sie können entweder die Anweisung 'exit' aus dem' catch'-Block entfernen oder einen [shutdown hook] erstellen (http://stackoverflow.com/questions/2921945/useful-example-of-a-shutdown-hook- in-java), die bei der JVM-Beendigung ausgeführt werden (nachdem Sie 'exit' aufgerufen haben). – dotvav

2

Einer der Gründe, einen Nicht-Null-Exit-Code bei einem Fehler einer Anwendung zu verwenden, ist, dass sie in Batch-Dateien verwendet werden können. Wenn Ihre Anwendung eine Konsolenanwendung ist, verwenden Sie immer den richtigen Beendigungscode. Sie wissen nicht, wie es in Zukunft verwendet wird.

+0

Ich stimme zu. Ich liebe Zukunftssicherheit, Exit-Codes werden selten in Programmen gesehen, auf die ich stoße, bizarr ... vielleicht zu viel Overhead-Denken für die meisten. – insidesin

Verwandte Themen