2016-06-11 10 views
-2

Angenommen, ich habe einen try - finally Block ohne Fangblock, wir werfen eine Ausnahme in den try Block. Kann ich diese Ausnahme verstehen?Können wir eine Ausnahme ohne Catch-Block fangen?

public static void main(String[] args) throws IOException{ 
    try { 
     throw new IOException("Something went wrong"); 
    } finally{ 
    } 
} 
+4

Der Code, den Sie dort haben, wird nicht kompiliert. Sie können die Ausnahme jedoch durch Hinzufügen eines "Fang" -Blocks abfangen. – Dando18

+2

Wenn Sie eine Ausnahme abfangen möchten, verwenden Sie einen 'catch' Block. –

+2

Die Frage macht keinen Sinn :) –

Antwort

4

Ja, es ist möglich.

Sie können einen nicht abgefangenen Ausnahmebehandler verwenden. Seine Aufgabe besteht darin, die Ausnahmen zu erfassen, die Ihr Programm nicht erfasst hat, und etwas damit zu tun.

public static void main(String[] args) throws IOException { 
    Thread.setDefaultUncaughtExceptionHandler((thread, thr) -> thr.printStackTrace()); 
    throw new IOException("Something went wrong"); 
} 

setDefaultUncaughtExceptionHandler ist eine Methode, die einen Handler registrieren wird, die aufgerufen wird, wenn eine Ausnahme in jedem Thread geworfen wurde, und wurde nicht gefangen. Der obige Code wird das Stacktrace des handlichen Throwable ausgeben.

Der Handler verwendet als Argument den Thread, in dem die Ausnahme aufgetreten ist, und das geworfene Throwable.

Sie können auch einen Handler pro Thread durch setUncaughtExceptionHandler auf einer Thread Instanz verwenden. Dieser Handler würde alle nicht abgefangenen Ausnahmen verarbeiten, die von diesem Thread ausgelöst wurden.

+0

Nie davon gehört, aber es funktioniert. – SHE

Verwandte Themen