Исключение, Возврат, Сериализуемый, - PullRequest
1 голос
/ 21 апреля 2009

Как (throw Exception) и (return value) реализованы в таких языках, как Java или C #? Я хочу знать механизм того, как его поддержка включена в язык, а не только использование try { .... } catch (Exception) {}.

Мы знаем, когда мы вызываем функцию, т. Е.

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

Затем вызов помещается в стек, и когда метод возвращает вызов в doSomething, в стеке выскакивает.

Что происходит в случае, когда оператор return возвращается со значением, скажем return 4;, выскакивает вызов doSomething() в стеке, и обрабатывается ли следующий оператор счетчика Prog? Что случилось с возвращенным значением? Где он был спасен и как он используется?


Аналогичным образом, в случае выброса исключения, оператор throw ex; находит в стеке соответствующий оператор catch, и, пока не найдет его, он будет выталкивать вещи из стека ... Как работает этот механизм

1 Ответ

2 голосов
/ 21 апреля 2009

Взгляните на эту статью и посмотрите, поможет ли это. В нем рассказывается об основах SEH системы исключений .NET (C #).

EDIT:

Если вы спрашиваете: «Как вызовы методов с параметрами и возвращаемыми значениями работают в C # и Java», посмотрите на эту статью .

На очень низком уровне (о чем я думаю, вы спрашиваете): когда вы вызываете метод, вы помещаете свои параметры в стек, затем запускаете функцию, затем извлекаете возвращаемое значение стека в зарегистрировать и затем обработать его, как показано ниже:

  • Возврат из метода (код сборки)
  • pop esx - выгрузить значение из стека и сохранить его в регистре EAX
  • jz esx A01h - Если регистр EAX равен нулю, перейдите в это место.

РЕДАКТИРОВАТЬ # 2:

В случае исключения управляемая среда (Java, .NET и т. Д.) Начинает разматывать стек по одному шагу за раз, ища блок «catch» или «finally», который может обработать ошибку. Он продолжает делать это до тех пор, пока не найдет какой-то блок кода, который может с этим справиться, или он исчерпает код и просто завершит программу. Чтобы понять, как все это работает на уровне стека, зависит от того, о какой управляемой платформе вы говорите, но первая статья выше в сочетании с этой статьей даст вам более глубокое представление.

...