【问题标题】:What is binding in Java - Terminology什么是 Java 中的绑定 - 术语
【发布时间】: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 bindingstatic binding 的一般定义。

标签: java


【解决方案1】:

通常,“绑定”是将标识符与其标识的任何内容相关联,无论是方法、变量还是类型。

Java 中的所有绑定都是静态的(“早期”),但实例方法的绑定除外,它可能是静态的或动态的(“后期”),具体取决于方法的可访问性。

Java Language Specification 在访问字段的上下文和访问实例方法的上下文中都提到了绑定。第15.11章比较了字段绑定(静态)和实例方法绑定(动态),并提供了代码示例来对比这两种绑定。

【讨论】:

    猜你喜欢
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 2010-09-05
    • 2014-03-30
    • 2011-02-06
    • 2019-10-20
    相关资源
    最近更新 更多