0

示例代码是:-

import javax.sound.midi.*;
import java.io.*;

class test{

public void go() throws MidiUnavailableException{
//try{
Sequencer sequencer = MidiSystem.getSequencer();
System.out.println("Got it");
//}

/*catch(Exception ex){
System.out.println("Size Matters");
}*/

/*catch(MidiUnavailableException ex){
System.out.println("I am the incorrect exception");
}*/
}

public static void main(String [] args) throws MidiUnavailableException{
test obj = new test();
//try{
obj.go();
//}
/*catch(MidiUnavailableException mex){
System.out.println("Compiler should catch me");

}*/

}
}

编译代码时我没有得到任何信息;这是否意味着JVM会处理这种情况下的异常?或者如果系统无法提供定序器,那么我的程序将终止?

4

3 回答 3

2

当您的 main 方法抛出异常时,执行停止并将堆栈跟踪打印到 stdout 并且 JVM 关闭。

这没有什么奇怪的 - 声明你的 main 抛出异常是可以接受的,只是没有什么可以捕获它们,所以 JVM 所能做的就是爆炸。

于 2012-11-06T12:17:16.040 回答
2

既然main()throws MidiUnavailableException,你很好。如果抛出这样的异常,go()它将冒泡并停止 JVM。

于 2012-11-06T12:17:23.893 回答
2

是的。未处理的异常将终止线程。当所有非守护线程终止时,您的程序将终止。如果最后一个线程因异常终止,则退出状态为非零。而且你的程序只有一个线程。

于 2012-11-06T12:18:58.923 回答