2016-04-09 5 views
0

Ich habe das Head First Java 2E Buch durchgegangen, das Java 5 behandelt, und ich stoße auf ein Problem mit der Ausnahmebehandlung, die ich nicht verstehe . Im Kapitel über die Ausnahmebehandlung gibt das Buch das folgende Beispiel als den richtigen Weg an, einen try/catch-Block zu verwenden, um eine MidiUnavailableException abzufangen.Java try/catch Block, der Text nicht ausgibt, wenn Ausnahme gefangen wird

import javax.sound.midi.*; 

public class MusicTest { 

    public void play() { 
     try { 
      Sequencer sequencer = MidiSystem.getSequencer(); 
      System.out.println("Sequencer initialized..."); 
     } catch (MidiUnavailableException ex) { 
      System.out.println("Bummer..."); 
     } 
    } 

    public static void main(String[] args) { 
     MusicTest mt = new MusicTest(); 
     mt.play(); 
    } 

} 

Ohne den try/catch-Block kann das Programm nicht mit einer MidiUnavailableException kompiliert werden. Ich würde erwarten, dass mit dem Code oben, ich würde die Ausgabe erhalten:

Bummer... 

stattdessen bekomme ich

Sequencer initialized... 

Ist dies nur ein Unterschied zwischen Java 5 und Java 8 oder ich tue etwas falsch ?

+1

Warum würden Sie das erwarten? Warum erwarten Sie, dass Ihr Programm Ausnahmen auslöst? – Tunaki

+0

Wenn Sie "Sequencer initialized ..." erhalten, bedeutet dies, dass keine Ausnahme ausgelöst wird ... die Zeile System.out.println ("Sequencer initialized ..."); wird ausgeführt. –

+0

Das verstehe ich, aber wenn ich den try-Block raus nehme, bekomme ich eine Ausnahme. Vielleicht verstehe ich nicht vollständig, wie Ausnahmen funktionieren, aber warum hat ein try/catch-Block Auswirkungen darauf, ob eine Ausnahme ausgelöst wird? Sollte es nicht einen fangen, wenn es geworfen wird? – Argyle

Antwort

3

Ich werde versuchen, es kurz zu halten.

Try/catch Block behandelt eine Ausnahme wenn es eine gibt.

ABER in einigen Fällen müssen Sie einen try/catch-Block setzen, um eine Klasse zu verwenden, die eine Ausnahme auslösen kann.

In Ihrem Fall, wenn Sie es herausnehmen, wird Ihr Code nicht kompilieren, weil es nach dem try/catch-Block fragt, das bedeutet nicht, dass es immer eine Ausnahme geben wird.

Hoffe, das hilft.

1

Die Sequenzer-Klasse kann eine Ausnahme auslösen. Deshalb müssen Sie die try catch Blöcke hinzufügen. Aber es läuft gut, so dass keine Ausnahmen geworfen werden.

Versuchen Sie, Ihr Gerät zu entfernen und führen Sie es dann aus. Es wird wahrscheinlich dann die Ausnahme auslösen.

+0

Wenn ich den try/catch-Block nicht habe, bekomme ich eine Ausnahme. Ich verstehe den try/catch-Block so, dass er verwendet wird, um eine Ausnahme zu behandeln, die ausgelöst werden kann, aber seine Anwesenheit sollte keinen Einfluss darauf haben, ob eine Ausnahme ausgelöst wird oder nicht. – Argyle

+1

Sie vermischen Laufzeitausnahmen und Kompilierungsfehler. Sie sind nicht dasselbe. – csmckelvey

+0

@Argyle Kompilierzeit Fehler sind keine Ausnahmen. Normalerweise erhalten Sie nur Exception, wenn Sie das Programm ausführen. –

Verwandte Themen