try-catch无法正常工作

时间:2016-10-13 22:25:35

标签: java try-catch javax.sound.midi

我正在从 HeadFirst 阅读Java。我开始阅读有关异常处理的章节。书中的代码是我在电脑上执行的。

import javax.sound.midi.*;
class PlayMusic
{
    public void play()
    {
        try{
            Sequencer sq = MidiSystem.getSequencer();
            System.out.println("We got a sequencer");
        }
        catch(MidiUnavailableException ex)
        {   
            System.out.println("Bummer!");  
            ex.printStackTrace();
        }
    }
    public static void main(String[] args)
    {
        PlayMusic pm = new PlayMusic();
        pm.play();
    }
}

当我删除try-catch块时,编译器会引发MidiUnavailableException错误。我使用try-catch来捕获该异常,但System.out.println("Bummer");没有被执行。而是执行try块。

这里发生了什么?

2 个答案:

答案 0 :(得分:1)

当您收到编译器错误时,表示方法 可能 抛出MidiUnavailableException。在运行时是抛出异常,如果操作成功,则不会输入catch块。如果您有finally阻止,则 保证将被输入。

答案 1 :(得分:0)

MidiUnavailableException是一个已检查的异常,因此您需要包含catch块以便编译代码。但是,无法保证在程序执行时实际抛出异常。在您的情况下,它不会被抛出,因此try块中的代码会正常执行,并且您的错误打印输出永远不会被调用。