我知道輸出是什麼。但是,問題是這個問題的解釋是什麼。Java拋出異常混亂-1與示例
public class LongExp{
LongExp() throws Exception{
LongExp.start();
}
public static void start()throws RuntimeException{
throw new IllegalMonitorStateException();
}
public static void main(String args[]) throws Throwable{
try{
try{
try{
new LongExp();
} catch(Throwable t){
System.out.println("catch(Throwable t) 1");
throw t;
}
}catch(Throwable t){
System.out.println("catch(Throwable t) 2");
if (t instanceof IllegalMonitorStateException){
System.out.println("(t instanceof IllegalMonitorStateException)");
throw (RuntimeException)t;
}else{
System.out.println("else (t instanceof IllegalMonitorStateException)");
throw (IllegalMonitorStateException)t;
}
}
}catch(IllegalMonitorStateException e){
System.out.println("a");
}catch(RuntimeException e){
System.out.println("b");
}catch(Exception e){
System.out.println("c");
}catch(Throwable e){
System.out.println("d");
}
}
}
這是輸出
catch(Throwable t) 1
catch(Throwable t) 2
(t instanceof IllegalMonitorStateException)
a
我解釋什麼都正在被類型轉換傳播, 這是引用的就在變化,但不是實例類型的異常物體。 這就是爲什麼在最後它抓住了IllegalMonitorStateException。
我正確嗎?
編輯:TYPOS;