如果try
块中发生异常,执行如何转移到catch
块?这不是C#/ Java / C ++问题,我只是想知道它是如何在内部工作的。
答案 0 :(得分:8)
这不是c#/ java / c ++问题。它如何在内部工作,该行如何知道去捕获语句。
这如何在内部工作使得这几乎是一个c#/ java / C ++问题(因为它将以不同的方式实现)。
在Java中,try块将自身安装到一个特殊的表中(在类文件中)。当JVM抛出异常时,它会查看该表以查看下一个catch或finally块的去向。
答案 1 :(得分:6)
发生异常时,会执行特殊指令(通常称为中断)。这导致执行一个通用错误处理程序,该处理程序推断哪个是最新安装的合适异常处理程序。然后执行该处理程序。
答案 2 :(得分:5)
在本地编译的语言(如C ++)和使用在Java或C#等虚拟机上执行的字节码的语言之间技术处理异常的方式有所不同。
C ++编译器通常会生成代码,用于协调运行时异常处理所需的信息。专用数据结构用于记住try块的进入/退出以及相关的异常处理程序。发生异常时,会产生一个中断,并将控制权传递给操作系统,然后操作系统检查调用堆栈并确定要调用的异常处理程序。
Vishal Kochhar在以下文章中详细解释了更多细节:
在Java或.NET中,不需要维护异常处理信息的开销,因为运行时将能够内省字节代码以找到相关的异常处理程序。因此,只有实际抛出的异常才会导致开销。
答案 3 :(得分:0)
它应该适用于所有语言:
if (error_occured xy while doing things in try){
call_catch_part(error xy)
}
答案 4 :(得分:0)
它基本上解析了语言的基础知识。 您可以在Here
获取所有信息答案 5 :(得分:0)