查询有关异常处理 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