2009-04-21 9 views
1

Wie wird (throw Exception) und (return value) in einer Sprache wie Java oder C# implementiert? Ich möchte den Mechanismus wissen, wie seine Unterstützung in einer Sprache enthalten ist und nicht nur die Verwendung von try { .... } catch (Exception) {}.Ausnahme, Rückgabe, Serialisierbar,

Wir wissen, wenn wir eine Funktion aufrufen heißt

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

dann auf den Anruf auf den Stapel gelegt wird, und wenn das Verfahren den Aufruf von doSomething auf Stapel kehrt herausspringt.

Was in einem Fall passiert, wo die return-Anweisung kehrt mit einem Wert, sagen return 4;, der Anruf an doSomething() auf dem Stapel herausspringt, und die nächste Anweisung auf Prog Zähler bekam verarbeitet? Was ist mit dem zurückgegebenen Wert passiert? Wo wurde es gespeichert und wie wird es genutzt?


Ähnlich im Fall einer Ausnahme werfen, die throw ex; Anweisung findet auf dem Stapel die entsprechende catch Anweisung, und bis er es findet, hält es die Dinge aus dem Stapel knallen ... Wie funktioniert dieser Mechanismus Arbeit ?

+1

Es ist wahrscheinlich nützlich, wenn Sie dies zu 2 verschiedenen Fragen bearbeiten –

+0

Sie nur Ihre Frage bearbeiten, jetzt ist es ganz anders. –

+0

Sorry, aber ich dachte, dass es mehr Ausarbeitung braucht. –

Antwort

2

Werfen Sie einen Blick auf this article und sehen, ob es hilft. Es handelt von den SEH-Grundlagen des .NET (C#) - Ausnahmesystems.

EDIT:

Wenn Sie fragen, „Wie funktioniert Methoden mit Parametern aufrufen und Rückgabewerte in so etwas wie C# und Java arbeiten“, dann auf this article aussehen.

Auf einem wirklich niedrigen Niveau (was ich denke, Sie fragen), Wenn Sie eine Methode aufrufen, drücken Sie Ihre Parameter auf den Stapel, dann führen Sie die Funktion, dann pop den Rückgabewert des Stapels in ein register und dann Prozess davon, wie die folgenden aus:

  • Return from Methode (Assemblercode)
  • pop esx - Pop Wert off Stapel und speichert sie in den EAX
  • jz esx A01h registrieren - Wenn der EAX Register ist Null, springe zu diesem Ort.

EDIT # 2:

Im Fall einer Ausnahme, das verwaltete Framework (Java, .NET, etc.) startet den Stapel einen Schritt zu einer Zeit für einen „Fang suchen entspannen "oder" finally "blockiert, dass der Fehler behandelt werden kann. Es macht so weiter, bis es einen Block Code findet, der damit umgehen kann, oder es hat keinen Code mehr und beendet nur das Programm. Um zu verstehen, wie all das auf einer Stack-Ebene funktioniert, hängt davon ab, von welchem ​​verwalteten Framework Sie sprechen, aber der erste Artikel oben, kombiniert mit this article, wird Ihnen einen tieferen Einblick geben.

+0

Ja, ich frage nach den Low-Level-Sachen. Danke ich finde mehr oder weniger das selbe aber wollte bestätigen .. danke für die Antwort. –

+0

Wenn dies Ihre Frage beantwortet hat, dann markieren und beantworten oder löschen Sie die Frage (und lassen Sie sie dann verwaist) – JasonRShaver

Verwandte Themen