2016-10-13 2 views
0

Ich lese Java von HeadFirst. Ich fing an, das Kapitel über die Ausnahmebehandlung zu lesen. Es gab Code in dem Buch, das ich auf meinem Computer ausgeführt habe.Versuch-Fang funktioniert nicht richtig

Wenn ich den try-catch-Block entferne, löst der Compiler einen MidiNavailableException-Fehler aus. Ich habe try-catch verwendet, um diese Ausnahme abzufangen, aber System.out.println("Bummer"); wird nicht ausgeführt. Stattdessen wird der try-Block ausgeführt.

Was passiert hier?

+0

Sie sollten weiterlesen oder lesen [dieses Tutorial] (https://docs.oracle.com/javase/tutorial/essential/exceptions/try.html). Der 'catch' Block wird nur ausgeführt wenn iff. eine passende Ausnahme wird ausgelöst. Der Compiler hat sich beschweren, weil Sie die Exception überhaupt nicht abgefangen haben (der Compiler kann nicht wissen, ob zur Ausführungszeit eine Exception ausgelöst wird). – Turing85

Antwort

0

MidiUnavailableException ist eine geprüfte Ausnahme. Daher müssen Sie den catch-Block einschließen, damit der Code kompiliert werden kann. Es gibt jedoch keine Garantie, dass die Ausnahme tatsächlich ausgelöst wird, wenn Ihr Programm ausgeführt wird. In Ihrem Fall wird es nicht geworfen, also wird der Code in Ihrem try Block normal ausgeführt und Ihr Ausdruck für den Fehler wird nie aufgerufen.

+0

Also meinst du, wenn ich 'getSequencer()' Methode benutze, muss ich es in try-catch Block einschließen, weil es eine 'Exception' auslösen könnte. – Arindam

+0

Ja, entweder das oder deklarieren, dass die umschließende Methode die Ausnahme auslöst (in diesem Fall die "Play" -Methode). –

1

Wenn Sie einen Compiler-Fehler erhalten, bedeutet es, das Verfahren kann ein MidiUnavailableException werfen. Zur Laufzeit werden Ausnahmen ausgelöst, und wenn die Aktion erfolgreich ist, wird der catch Block nicht eingegeben. Wenn Sie einen finally Block haben, wird dieser garantiert eingegeben werden.