1

( throw Exception) 和 ( return value) 如何在 Java 或 C# 等语言中实现?我想知道它的支持如何包含在语言中的机制,而不仅仅是try { .... } catch (Exception) {}.

我们知道什么时候调用一个函数,即

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

然后 on 调用被放入堆栈,当方法返回时调用doSomethingon stack 弹出。

在 return 语句返回一个值的情况下会发生什么,比如说return 4;doSomething()堆栈上的调用弹出,并且 Prog 计数器上的下一条语句得到处理?返回值发生了什么?它在哪里保存以及如何使用?


类似地,在抛出异常的情况下,throw ex;语句在堆栈上找到适当的catch语句,直到找到它,它才会不断从堆栈中弹出东西……这个机制是如何工作的?

4

1 回答 1

2

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

编辑:

如果您问“如何在 C# 和 Java 中使用参数和返回值调用方法”,请查看这篇文章

在一个非常低的级别(我想你在问什么),当你调用一个方法时,你将你的参数压入堆栈,然后运行该函数,然后将堆栈的返回值弹出到一个寄存器中,然后处理它,如下所示:

  • 从方法返回(汇编代码)
  • pop esx- 从堆栈中弹出值并将其存储在 EAX 寄存器中
  • jz esx A01h- 如果 EAX 寄存器为零,则跳转到该位置。

编辑#2:

在发生异常的情况下,托管框架(Java、.NET 等)开始逐步展开堆栈,以寻找可以处理错误的“catch”或“finally”块。它会一直这样做,直到找到一些可以处理它的代码块,或者它用完代码并终止程序。要了解这一切在堆栈级别如何工作取决于您所谈论的托管框架,但上面的第一篇文章结合本文将为您提供更深入的了解。

于 2009-04-21T19:36:57.710 回答