0

我正在从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 块。

这里发生了什么?

4

2 回答 2

1

当您收到编译器错误时,这意味着该方法可能会抛出一个 MidiUnavailableException. 在运行时是抛出异常的时候,如果操作成功,则catch不会进入该块。如果您有一个finally块, 保证会被输入。

于 2016-10-13T22:27:37.540 回答
0

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

于 2016-10-13T22:29:23.313 回答