gpt4 book ai didi

java - 什么是类、引用和对象?

转载 作者:IT老高 更新时间:2023-10-28 20:32:54 26 4
gpt4 key购买 nike

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

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

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

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

最佳答案

如果你喜欢住房隐喻:

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

您可以随意复制该引用资料,但只有一所房子——您只是复制上面有地址的卡片,而不是房子本身。

在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 蓝图来 build 新房子。 JVM 这样做,并返回对房子的引用。然后将此引用复制到 myFoo。这基本上就像要求承包商为您 build 房屋一样。他做了,然后告诉你房子的地址;你把这个地址写下来。
  2. 在第 2 行,您将此地址提供给另一个方法,callBar。接下来让我们跳到那个方法。
  3. 这里,我们有一个引用Foo foo。 Java 是按值传递的,因此 callBar 中的 foomyFoo 引用的 copy。可以把它想象成给 callBar 自己的卡片,上面有房子的地址。 callBar 用这张卡做什么?它要求 build 一座新房子,然后用你给它的卡片写下新房子的地址。请注意,现在 callBar 无法到达第一个房子(我们在第 1 行中 build 的那个),但该房子并没有改变,因为一张曾经有其地址的卡片现在上面有其他房子的地址。
  4. 回到第一个方法,我们取消引用 myFoo 以调用它的方法 (doSomething())。这就像看卡,去卡上地址的房子,然后在那房子里做点什么。请注意,带有 myFoo 的地址的卡片不会被 callBar 方法更改——记住,我们给了 callBar 一个 copy 我们的引用。

整个序列会是这样的:

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

关于java - 什么是类、引用和对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9224517/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com