我正在从 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块。
这里发生了什么?
答案 0 :(得分:1)
当您收到编译器错误时,表示方法 可能 抛出MidiUnavailableException
。在运行时是抛出异常,如果操作成功,则不会输入catch
块。如果您有finally
阻止,则 保证将被输入。
答案 1 :(得分:0)
MidiUnavailableException是一个已检查的异常,因此您需要包含catch块以便编译代码。但是,无法保证在程序执行时实际抛出异常。在您的情况下,它不会被抛出,因此try
块中的代码会正常执行,并且您的错误打印输出永远不会被调用。