当前位置: 首页 > 面试题库 >

Java什么是类,引用和对象?

司空健
2023-03-14
问题内容

我从事Java编程已有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在callBar是一个拷贝的的myFoo参考。可以想像是给callBar自己的卡,上面带有房子的地址。什么是callBar与此卡怎么办?它要求建造一所新房子,然后使用你提供的卡来写该新房子的地址。请注意,callBar现在无法到达第一个房屋(我们在第1行中建造的房屋),但是由于以前有其地址的卡现在具有其他房屋的地址,因此该房屋没有改变。
  4. 回到第一个方法,我们取消引用myFoo以在其上调用方法(doSomething())。这就像看卡片,去住地址在卡片上的房子,然后在那个房子里做些事情。请注意,我们的带有myFoo的地址的卡在callBar方法上是不变的-请记住,我们提供callBar了一份参考副本。

整个序列如下所示:

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


 类似资料:
  • 问题内容: Java中的类,对象和实例是什么? 问题答案: Java(和任何其他编程语言)是根据类型和值建模的。从理论上讲,值是某种信息量的表示,类型是一组值。当我们说值X 是类型Y 的实例时,我们只是说X是类型Y的值集合的成员。 这就是“实例”一词的真正含义:它描述的是一种关系而不是事物。 Java编程语言的类型系统支持两种类型,原始类型和引用类型。引用类型进一步分为类和数组类型。Java 对象

  • 问题内容: 什么是Java中的对象引用变量? 参考变量是否保存对象的内存地址? 我很困惑。请说明一下。 问题答案: 我不确定我是否有能力正确回答这个问题,但是… 对象是类的实例,它存储在内存中的某些位置 引用是用来描述指向对象所在的内存位置的指针的。 变量是一种可以访问应用程序中该内存位置的方法(其值为“变量”)。尽管变量只能指向单个内存地址(如果不为空),则在应用程序的整个生命周期中,它可能会更

  • 问题内容: 我正在向我的朋友解释OOP。我无法回答这个问题。(我有多可耻? 我只是想逃避,因为OOP描绘了现实世界。在现实世界中,父母可以容纳孩子,但孩子不能容纳父母。OOP也是如此。我知道它很愚蠢。:P 为什么此陈述无效? 因为aChild的成员是aParent成员的超集。那为什么孩子不能容纳父母。 问题答案: 正是因为aChild是aParent功能的超集。你可以写: 因为每只狐狸都是动物。但

  • 问题内容: 我有类GUI,因此可以创建如下对象: 和像这样的参考变量: 现在,据我所知,g2是引用GUI类的引用变量,而g1是GUI类的对象。g1和g2有什么区别?我可以将GUI类的属性与对象一起使用,但是g2的可能用法是什么? 问题答案: 参考是名称。对象就是东西。您可以为事物使用不同的名称,即使对于实际上不存在的事物也可以使用不同的名称。 您可以声明名称,而无需实际给它们任何“真实的”含义,例

  • 本文向大家介绍Java 中的弱引用是什么,包括了Java 中的弱引用是什么的使用技巧和注意事项,需要的朋友参考一下 Java里一个对象obj被创建时,被放在堆里。当GC运行的时候,发现没有任何引用指向obj,那么就会回收obj对象的堆内存空间。 换句话说,一个对象被回收, 必须满足两个条件: (1)没有任何引用指向它 (2)GC被运行。 在实际开发中,我们可以通过把所有指向某个对象的referec

  • 主要内容:面向对象编程(Object Oriented Programming,OOP)C++ 是一门面向对象的编程语言,理解 C++,首先要理解 类(Class)和 对象(Object)这两个概念。 C++ 中的类(Class)可以看做C语言中结构体(Struct)的升级版。结构体是一种构造类型,可以包含若干成员变量,每个成员变量的类型可以不同;可以通过结构体来定义结构体变量,每个变量拥有相同的性质。例如: 运行结果: 小明的年龄是 15,成绩是 92.500000 C++ 中的类