什么是类、引用和对象?

2022-08-31 19:40:11

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

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

有人可以以完整的方式区分类,引用和对象是什么吗?

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


答案 1

如果你喜欢住房隐喻:

  • 一堂课就像一栋房子的蓝图。使用此蓝图,您可以根据需要建造任意数量的房屋。
  • 您构建的每个房屋(或实例化,在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 行中发生了几件事。 告诉JVM使用蓝图建造一座新房子。JVM 执行此操作,并返回对房屋的引用。然后,将此引用复制到 。这基本上就像要求承包商给你盖房子一样。他这样做了,然后告诉你房子的地址;你把这个地址写下来。new Foo()FoomyFoo
  2. 在第 2 行中,将此地址提供给另一个方法 。接下来,让我们跳到该方法。callBar
  3. 在这里,我们有一个 参考 。Java 是按值传递的,因此 in 是引用的副本。把它想象成给自己的卡片,上面写着房子的地址。这张卡有什么用?它要求建造一座新房子,然后使用你给它的卡片写下新房子的地址。请注意,现在无法到达第一个房子(我们在1号线中建造的房子),但是那所房子没有变化,因为曾经有地址的卡片现在有其他房子的地址。Foo foofoocallBarmyFoocallBarcallBarcallBar
  4. 回到第一个方法中,我们取消引用以在其上调用方法()。这就像看着卡片,去卡片上地址的房子,然后在那所房子里做点什么。请注意,我们带有 地址的卡与 该方法没有变化 - 请记住,我们提供了参考的副本myFoodoSomething()myFoocallBarcallBar

整个序列将如下所示:

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

答案 2

编写代码时,将生成一个

实例(发生、复制)

对象

的一个说

并保留一个

参考

,因此您可以调用其方法。

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