栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么Java在编译时绑定变量?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么Java在编译时绑定变量?

原因在Java语言规范的15.11节中的示例中进行了说明,如下所示:

最后一行表明,实际上,所访问的字段不依赖于所引用对象的运行时类。
即使

s
持有对类对象的引用
T
,表达式也
s.x
指向
x
类的字段
S
,因为表达式的类型
s
S
。T类的对象包含两个名为的字段
x
,一个用于类
T
,一个用于其超类
S

缺少对字段访问的动态查找,使得程序可以通过简单的实现高效地运行。 后期绑定和覆盖的功能是可用的,但是仅当使用实例方法时才可以使用

因此,性能是一个原因。字段访问表达式的求值规范如下:

  • 如果该字段不是
    static

* 如果该字段是非空白字段`final`,则结果是`T`在 _Primary_ 值所引用的对象中找到的类型为具名成员字段的值。

在您的情况下, Primary 是指

derived
类型为的变量
MyClass

正如@Clashsoft所建议的,另一个原因是在子类中,字段没有被覆盖,而是被 隐藏了
。因此,允许根据声明的类型或使用强制类型访问哪些字段是有意义的。对于静态方法也是如此。这就是为什么根据声明的类型确定字段的原因。与实例方法重写不同,后者取决于实际类型。上面的JLS引用确实隐式提到了这个原因:

后期绑定和覆盖的功能是可用的,但仅当使用实例方法时才可用。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/452891.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号