【发布时间】:2013-04-16 23:13:38
【问题描述】:
如何在高级编程语言(如 Java)中实现异常处理?我的意思不是说如何在一种语言中使用异常。我的意思是编译器如何生成我们识别为异常处理的代码(汇编,或一些中间代码,如 Java 字节码),因为最终,计算机只能执行指令;更高级别的所有内容都必须由这些指令组成。
在C语言中,在异常存在之前,你会返回一个错误代码,但是如果一个函数已经返回了一些东西,那又如何呢?也许返回错误代码和实际结果的结构?
【问题讨论】:
-
你可以认为它有两个可选的返回值。它要么返回一个值(如字符串或数字或什么都没有),要么返回一个错误条件。两者都只是一小部分数据。生成的调用代码必须检测发生了什么并处理它。也许它在那里被抓住了。也许调用方法/函数会返回错误条件。
-
在 C 中,您还可以使用一对特殊函数(
setjmp()和longjmp())绕过一个或多个正常函数返回返回到前一点。这些函数记录和恢复结构中/从结构中的最小 CPU 状态(通常只有几个寄存器),以促进这种“跳转”。 -
4 '非建设性投票'?请。这个问题确实有一个单一的事实答案,可以在 JVM 规范中找到。
-
@LeeMeador 所以,try-block 的作用是让其中的所有函数调用检查返回结构的错误条件部分是否存在 catch 声明的错误,然后跳转到适当的错误处理块,或者如果错误没有被捕获,那么调用堆栈就会继续展开,直到较低的帧捕获它,或者没有剩余的帧并且程序只是终止。对吗?
-
是的。除了您可以将 JVM 视为在调用堆栈的最顶部放置了一个 catch
Throwable。如果您的main“返回”出现异常,它会被捕获在最顶端。我认为如果您正在运行命令行,它会打印一条消息。 JEE 容器做类似的事情。
标签: java assembly exception-handling compilation