【发布时间】:2018-04-11 01:38:17
【问题描述】:
我知道什么是静态绑定和动态绑定。所以我的问题与此无关。
根据this来看看静态绑定是怎么说的:
1) Java 中的静态绑定发生在编译期间,而动态绑定 绑定发生在运行时。
2) 私有方法、最终方法和静态方法以及变量 使用静态绑定并由编译器绑定,而虚拟方法是 在运行时基于运行时对象绑定。
3) 静态绑定使用类型(Java 中的类)信息进行绑定 而动态绑定使用对象来解析绑定。
3) 重载的方法在被覆盖时使用静态绑定进行绑定 方法在运行时使用动态绑定进行绑定。
让我们专注于上面的一个方面:
现在我们看到静态绑定将类和实例变量绑定到它们的值,并将静态方法调用绑定到相关方法体。
但在某些地方,例如 this ,他们将绑定定义为
方法调用与方法体的关联称为绑定。
但绑定也绑定变量。
现在我很困惑。绑定是否也仅与对方法体的方法调用或对其值的变量相关?我们如何定义绑定?
【问题讨论】:
-
如果您已经理解了第一部分(有 4 个项目,其中两个编号为 3?),并且它已经说“绑定”适用于方法和变量(您甚至强调了这一点),为什么第二个引用的方法只是让你感到困惑吗?仅仅因为它说“方法的关联”称为“绑定”,并不意味着其他事物也不能称为绑定。这不是一个排他性的声明。它没有说“绑定意味着方法”。它说“方法具有约束力”。由于这篇文章根本没有讨论变量,所以它根本没有涵盖所谓的变量。
-
@Andreas ,我的意思是定义绑定的真实来源。博客有时也可能使用松散的术语。你怎么能确定它们的值的变量实际上只被称为绑定?
-
Java 的“真实来源”是Java Language Specification,它没有定义“绑定”。在整个规范中,“绑定”一词被使用了 4 次,并且从未定义过。 Chapter 15 (Expressions) 说 “缺少对字段的动态查找访问允许程序通过简单的实现有效地运行。后期绑定和覆盖的强大功能是可用的,但仅在使用实例方法时。”
-
您可以在维基百科上找到dynamic binding 和static binding 的一般定义。
标签: java