什么是类、引用和对象?

新手上路,请多包涵

我已经编写 Java 2 年了,遇到了一个无法理解和区分类、引用和对象的问题。

我不确定类或引用是否相同,尽管我知道对象是什么。

有人可以完整地区分什么是类、引用和对象吗?

我所知道的是,类更像是对象的模板(房屋的蓝图,其中类是蓝图,房屋是对象)。

原文由 user962206 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 428
2 个回答

如果您喜欢住房隐喻:

  • 班级 就像房子的蓝图。使用此蓝图,您可以建造任意数量的房屋。
  • 您建造(或实例化,用 OO 术语)的每个房屋都是一个 对象,也称为 实例
  • 当然,每个房子也有一个地址。如果你想告诉别人房子在哪里,你可以给他们一张写有地址的卡片。那张卡片是对象的 参考
  • 如果您想参观这所房子,请查看卡片上写的地址。这称为 取消引用

您可以随心所欲地复制该参考资料,但只有一栋房子——您只是复制上面有地址的卡片,而不是房子本身。

在Java中,不能直接访问对象,只能使用引用。 Java 不会相互复制或分配对象。但是您可以复制和分配对变量的引用,以便它们引用同一个对象。 Java 方法总是按值传递,但值可以是对象的引用。所以,如果我有:

 Foo myFoo = new Foo();     // 1
callBar(myFoo);            // 2
myFoo.doSomething()        // 4

void callBar(Foo foo) {
    foo = new Foo();       // 3
}

那么让我们看看发生了什么。

  1. 第 1 行发生了几件事。 new Foo() 告诉 JVM 使用 Foo 蓝图建造一座新房子。 JVM 这样做,并返回对房子的引用。然后将此引用复制到 myFoo 。这基本上就像要求承包商为您建造房屋一样。他知道了,然后告诉你房子的地址;你把这个地址写下来。
  2. 在第 2 行中,您将此地址提供给另一个方法 callBar 。接下来让我们跳到那个方法。
  3. 在这里,我们有一个参考 Foo foo 。 Java 是按值传递的,因此 foo 中的 callBarmyFoo 参考的 _副本_。把它想象成给 callBar 它自己的卡片,上面有房子的地址。 callBar 用这张卡做什么?它要求建造一座新房子,然后用你给它的卡片写下新房子的地址。请注意 callBar 现在无法到达第一所房子(我们在第 1 行中建造的那所房子),但由于过去有地址的卡现在有上面有其他房子的地址。
  4. 回到第一个方法,我们取消引用 myFoo 以在其上调用一个方法( doSomething() )。这就像看卡片,去卡片上有地址的房子,然后在那个房子里做点什么。请注意,我们的卡 myFoo 的地址 callBar 方法更改——记住,我们给了 callBar 我们参考的 _副本_。

整个序列类似于:

  1. 要求 JVM 盖房子。它确实如此,并给了我们地址。我们将此地址复制到名为 myFoo 的卡中。
  2. 我们调用 callBar 。在我们这样做之前,我们将写在 myfoo 上的地址复制到一张新卡中,我们将其提供给 callBar 。它调用该卡 foo
  3. callBar 向 JVM 请求另一栋房子。它创建它,并返回新房子的地址。 callBar 将这个地址复制到我们给它的卡上。
  4. 回到第一种方法,我们查看原始的、未更改的卡片;去我们名片上有地址的房子;并在那里做点什么。

原文由 yshavit 发布,翻译遵循 CC BY-SA 4.0 许可协议

当你编码时,你构建了一个

实例(发生,副本)

目的

的一个说

班级

并保持

参考

到它,所以你可以调用它的方法。

此外,还有一些 OOP 基础知识: 对象实例参考

原文由 Marcelo 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题