2013-03-23 73 views
0

机制是如何通过继承影响/隐藏字段的机制,并且稍后解析了JVM规范的一部分?我知道它是part of the Java spec,可以在许多博客文章和SO问题中找到。但是,当我真正查看field resolution的JVM规范时,“隐藏”或“阴影”这些词不会出现在pdf of the JVM spec的任何位置。Java继承的字段阴影和JVM?

我问这是因为我正在编写自己的JVM,并发现这个字段映射是字节码/ VM的属性,而不仅仅是Java编译器或Java语言的一部分。我想知道这应该在虚拟机级别实施的适当的权威方式。当然,这个重要的JVM的(错误?)功能需要在某个地方正式记录吗?

回答

0

术语阴影通常指的是当一个标识符映射到另一个阴影时。即一个给定的名称可以指多个变量,所以必须有一个机制来消除它的歧义。这主要是一种语言级别的构造,因为它包含更多的名称。除了可选的调试信息外,局部变量名称不会出现在字节码中。

从字节码的角度来看,您已经有了对类,名称和描述符的明确引用。唯一的问题是你描述的字段是否在你指定的类中实际声明,或者它是否从它的一个超类继承。

正如您已经发现的那样,Field Resolution在该标准的5.4.3.2部分进行了说明。术语隐藏和阴影不被使用,因为它们适用于源代码而不是类文件。

+0

虽然我指的是继承字段的阴影。字段名称出现在字节码中。而且我发现了这个事实,因为我的DIY JVM(没有处理这个阴影)对于相同的字节码v.s获得了不同的结果。在真正的JVM上执行它。而且,当我在我的DIY JVM中混入了一些类似继承领域的阴影逻辑时,他们开始在我的单元测试中吐出相同的结果。我非常肯定,虚拟机必须要处理的是继承字段阴影。 – 2013-03-23 03:09:15

+0

@Li对于我来说,现场分辨率的规格看起来非常简单。你在哪里遇到问题? – Antimony 2013-03-23 03:11:02

+0

您是否有规范未涵盖的任何代码示例?我认为你可能会对这样的事实感到困惑,即虽然字段是被继承的,但它们并不像方法那样被虚拟地调度。 – Antimony 2013-03-23 03:20:02