Как (throw Exception
) и (return value
) реализованы в таких языках, как Java или C #? Я хочу знать механизм того, как его поддержка включена в язык, а не только использование try { .... } catch (Exception) {}
.
Мы знаем, когда мы вызываем функцию, т. Е.
public void doSomething() {
....
....
return;
}
Затем вызов помещается в стек, и когда метод возвращает вызов в doSomething
, в стеке выскакивает.
Что происходит в случае, когда оператор return возвращается со значением, скажем return 4;
,
выскакивает вызов doSomething()
в стеке, и обрабатывается ли следующий оператор счетчика Prog? Что случилось с возвращенным значением? Где он был спасен и как он используется?
Аналогичным образом, в случае выброса исключения, оператор throw ex;
находит в стеке соответствующий оператор catch
, и, пока не найдет его, он будет выталкивать вещи из стека ... Как работает этот механизм