2009-04-21 69 views
1

如何(throw Exception)和(return value)以Java或C#等语言实现?我想知道如何将其支持纳入语言的机制,而不仅仅是使用try { .... } catch (Exception) {}Exception,Return,Serializable,

我们知道,当我们调用一个函数,即

public void doSomething() { 
    .... 
    .... 
    return; 
} 

然后在呼叫被置于栈上,当该方法返回调用doSomething堆栈弹出。

在return语句返回一个值,说return 4;, 堆栈上的调用doSomething()弹出的情况下,并在柜台PROG下面的语句会发生什么得到处理?返回值发生了什么?它被保存在哪里以及它被如何利用?


在异常抛出的情况下

同样,throw ex;声明在栈上找到合适的catch语句,直到它找到它,它不断出现的东西出栈的...这是如何工作的机制?

+1

如果您将其编辑为2个不同的问题 – 2009-04-21 19:14:18

+0

您可能只需编辑您的问题,但现在完全不同了。 – 2009-04-21 19:38:58

回答

2

看看this article,看看它是否有帮助。它讨论了.NET(C#)异常系统的SEH基础。

编辑:

如果你问“如何调用带有参数的方法和返回值的东西如C#和Java运行”,然后看this article

在一个非常低的层次上(我想你在问什么),当你调用一个方法时,你将你的参数压入堆栈,然后运行该函数,然后弹出堆栈的返回值一个register然后过程关闭它,如下所示:从方法

  • 返回(汇编代码)
  • pop esx - 流行值关堆,并将其存储在EAX寄存器
  • jz esx A01h - 如果EAX寄存器为零,跳转到这个位置。

EDIT#2:

在异常的情况下,被管理框架(爪哇,.NET等)开始展开堆栈一个步骤在一个时间寻找一个“捕获“或”finally“块来处理错误。它会一直这样做,直到找到一些可以处理它的代码块,或者代码耗尽并终止程序。要理解所有这些在堆栈级别的工作方式取决于您正在讨论的是哪个托管框架,但上面的第一篇文章与this article结合在一起会为您提供更深入的视图。