查詢有關異常處理 c#和java的。異常處理
作爲I've read in C#終於塊將不被時,有發生StackOverflowException
因爲沒有房間在堆棧上,即使執行任何更多的代碼和將當有一個ExecutionEngineException
發生也不能稱爲執行時,其可以從一個出現致電Environment.FailFast()
。
以我下面的代碼(C#)我故意生成StackOverflowException
:
class overflow1
{
public void disp()
{
try
{
Console.WriteLine("disp");
disp();
}
catch(Exception e) {
Console.WriteLine(e);
Console.WriteLine("catch");
}
finally {
Console.WriteLine("finalyyy");
}
}
}
class ExceptionHandling
{
static void Main() {
overflow1 s = new overflow1();
s.disp();
Console.Read();
}
}
輸出:
DISP
DISP
DISP
。
。
。
過程終止由於StackOverFlowException
正如我所說如果發生StackOverflowException
因爲沒有房間在堆棧上,即使執行的最後阻止任何更多的代碼。即使catch塊的方法也沒有被調用,可能是由於相同的原因(沒有更多的空間留在堆棧中)。
現在,我已經試過這上面相同的代碼在的java:
public class ExceptionHandlingTest {
static int count1 = 0 ,count2=0;
static void disp()
{
try{
System.out.println("disp"+(++count1));
disp();
}catch(StackOverflowError e){
System.out.println(e);
System.out.println("catch");
System.exit(0);
}finally{
System.out.println("handle"+(--count1));
}
}
public static void main(String... args)
{
disp();
}
}
輸出:
DISP1
DISP2
。
。
。
disp2456
handle2455
handle2454
。
。
線程「main」中的異常java.lang.StackOverflowError
。
。
handle2
句柄1
handle0
編輯: 事實上,我的問題是代碼的行爲應該工作一樣在兩種語言,因爲如果再裝滿所有的堆棧空間如何在Java JVM發現更多空間來調用finally塊的方法?
謝謝。
負面選民請在評論中提及理由。 – 2014-09-23 14:45:37
雖然看起來您在這個問題上花費了大量精力,但它可能會從2-3行TL; DR;部分有明確的單個問題。 – 2014-09-23 14:47:19
你的問題並不完全清楚,你試圖解決什麼**問題**?或者您是否在查詢C#VS Java異常處理的行爲? *你可以更清楚地概述你的意圖嗎?* – Greg 2014-09-23 14:47:24