2012-11-06 16 views
0

示例代码: -我正在避免异常并让它传递给JVM,我不应该得到编译时错误吗?

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将在这种情况下处理异常?或者,如果系统无法提供音序器,那么我的程序将终止?

回答

2

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

2

当你的main方法抛出一个异常时,执行停止并且stacktrace打印到stdout并且JVM关闭。

这里没有什么奇怪的 - 可以声明你的主要抛出异常,只是没有什么可以抓住它们,所以JVM所能做的就是爆炸。

+0

*“...所以JVM所能做的就是爆炸。”*。呃...它通常会用堆栈跟踪并且没有实际的爆炸:-) –

2

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

相关问题