捕获异常时,Java try / catch块不输出文本

时间:2016-04-09 14:50:08

标签: java exception-handling java-8

我一直在阅读Head First Java 2E书,其中涵盖了Java 5,我遇到了一个我不理解的异常处理问题。在特殊处理章节中,本书给出了以下示例,作为使用try / catch块捕获MidiUnavailableException的正确方法。

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();
   }

}

没有try / catch块,程序无法使用MidiUnavailableException进行编译。我希望通过上面的代码,我得到输出:

Bummer...

相反,我得到了

Sequencer initialized...

这只是Java 5和Java 8之间的区别还是我做错了什么?

2 个答案:

答案 0 :(得分:3)

我会尽量保持简短。

如果存在异常,则尝试/ catch块处理异常。

但在某些情况下,您必须放置一个try / catch块才能使用可能引发异常的类。

所以在你的情况下,如果你把它拿出来,你的代码就不会编译,因为它要求try / catch块,这并不意味着总会有异常。

希望这有帮助。

答案 1 :(得分:1)

Sequencer类可能抛出异常。这就是你必须添加try catch块的原因。但它运行正常,因此不会抛出异常。

尝试删除您的设备,然后运行它。它可能会抛出异常。