【问题标题】:What is a field?什么是字段?
【发布时间】:2015-12-08 12:35:44
【问题描述】:

在 Oracle 教程中,它写道:

“要访问字段,您可以使用对对象的命名引用,如前面的示例中一样,或者您可以使用任何返回对象引用的表达式。”

鉴于“字段”是“类变量”的另一个名称;为什么要使用“对对象的命名引用”?使用“对类的命名引用”肯定会更好吗?

重写将如下所示: “要访问类变量,您可以使用对对象的命名引用,如前面的示例所示,也可以使用任何返回对象引用的表达式。”

肯定会使用“对对象的命名引用”来访问“对象变量”而不是“类变量”?

【问题讨论】:

  • 您能否使用您引用的定义添加指向教程特定部分的链接?您引用的措辞接近规范:Field declarations (§8.3) describe class variables, which are incarnated once, and instance variables, which are freshly incarnated for each instance of the class. A field may be declared final (§8.3.1.2), in which case it can be assigned to only once. Any field declaration may include an initializer. 但它明确指出字段也可以是实例变量。来自:Classes
  • 您的问题是什么?或者你想通过改写 Java 教程来展示你有多聪明?
  • 当然是zrvan。这是有问题的页面:docs.oracle.com/javase/tutorial/java/javaOO/usingobject.html 这是第 18 行。
  • @Chris,啊,但是您认为fieldclass variable 的另一个名称的假设是错误的,Understanding Class Members 的教程至少根据我之前引用的规范明确区分类变量字段(带静态修饰符)和实例变量字段(不带)。任何实例变量字段(也是类成员字段)必须通过对类实例的引用来访问(并且必须具有 public 修饰符)。
  • 是的,我知道“类变量字段”和“实例变量字段”之间存在差异。但是,“字段”和“变量”这两个术语不是一回事吗?

标签: java class variables field


【解决方案1】:

我将“对对象的命名引用”解释为“变量”。这是the documentationfield的定义:

类的数据成员。除非另有说明,否则字段不是静态的。

所以在下面的例子中,book 是一个变量(“对对象的命名引用”,books[0] 是一个“返回引用的表达式”,Title 是一个“字段”:

public class Book
{
    public string Title;
}

Book book = new Book();
book.Title = "Moby Dick";  // set field value

Book[] books = new Book[10];
books[0] = book;

string title = books[0].Title;  // expression that returns an object reference.

【讨论】:

    【解决方案2】:

    鉴于“字段”是“类变量”的另一个名称;为什么要使用“对对象的命名引用”?使用“对类的命名引用”肯定会更好吗?

    我不知道教程是否真的说明了这一点,但无论如何这是错误的。 Java 语言规范明确指出(强调我的):

    字段声明(第 8.3 节)描述了类变量,它们只体现一次,实例变量,对于类的每个实例都是新体现的。

    访问和/或修改这些实例变量,它们是通过命名引用或返回对象引用的表达式为每个对象全新体现的,因此非常有意义。

    如果教程确实陈述了与此相矛盾的内容,那就是不正确的。

    【讨论】:

      猜你喜欢
      • 2012-03-13
      • 1970-01-01
      • 2011-11-02
      • 2017-07-31
      • 2017-12-09
      • 2010-11-26
      • 2011-01-11
      • 2021-12-15
      • 2019-12-27
      相关资源
      最近更新 更多