Java 对象、引用和类。需要帮助理解一些代码吗

Java 对象、引用和类。需要帮助理解一些代码吗,java,class,object,reference,Java,Class,Object,Reference,我有点理解: 类是一种可以从中创建对象的蓝图 对象是创建的实际实例或对象 引用就像指向所述对象的地址 当下面的代码被调用两次时,会发生什么 Car batmobile = new Car(); 将创建两个对象吗?如果是,第一个对象会发生什么情况? 具体来说,在类、对象和引用方面会发生什么 第二部分: 这是一个无限循环吗?自从构造器生成一个对象,然后再次调用构造器后,对象会一直被创建吗?类、对象、引用关系在这里是如何工作的 public class Alphabet { Alphabet

我有点理解:

  • 类是一种可以从中创建对象的蓝图
  • 对象是创建的实际实例或对象
  • 引用就像指向所述对象的地址
当下面的代码被调用两次时,会发生什么

Car batmobile = new Car();
将创建两个对象吗?如果是,第一个对象会发生什么情况? 具体来说,在类、对象和引用方面会发生什么

第二部分:

这是一个无限循环吗?自从构造器生成一个对象,然后再次调用构造器后,对象会一直被创建吗?类、对象、引用关系在这里是如何工作的

public class Alphabet {
  Alphabet abc;

  public Alphabet() {
    abc = new Alphabet();
  }
}

我使用cookie隐喻来解释对象和类

把计算机的内存想象成一大块饼干面团。(很好吃,不是吗?)

你们班是一个饼干切割工。只要你有面团(记忆),它就会产生特定大小和形状的饼干。对象是用饼干切割器切割的饼干

1) 蝙蝠车是对汽车对象的引用。它只能指向汽车或汽车的子类。它在创建时没有附加对象实例(面团)。当调用new Car()时,您会戳出一个对象实例,并将其指定给一个名为batmobile的引用。只有一个参考


2) 不要这样做。我不确定最终可能会出现堆栈溢出,但这并不能得到您想要的结果。您可能需要查找单例模式。这可能会对您有所帮助。

我使用cookie隐喻来解释对象和类

把计算机的内存想象成一大块饼干面团。(很好吃,不是吗?)

你们班是一个饼干切割工。只要你有面团(记忆),它就会产生特定大小和形状的饼干。对象是用饼干切割器切割的饼干

1) 蝙蝠车是对汽车对象的引用。它只能指向汽车或汽车的子类。它在创建时没有附加对象实例(面团)。当调用new Car()时,您会戳出一个对象实例,并将其指定给一个名为batmobile的引用。只有一个参考


2) 不要这样做。我不确定最终可能会出现堆栈溢出,但这并不能得到您想要的结果。您可能需要查找单例模式。这可能会对您有所帮助。

我使用cookie隐喻来解释对象和类

把计算机的内存想象成一大块饼干面团。(很好吃,不是吗?)

你们班是一个饼干切割工。只要你有面团(记忆),它就会产生特定大小和形状的饼干。对象是用饼干切割器切割的饼干

1) 蝙蝠车是对汽车对象的引用。它只能指向汽车或汽车的子类。它在创建时没有附加对象实例(面团)。当调用new Car()时,您会戳出一个对象实例,并将其指定给一个名为batmobile的引用。只有一个参考


2) 不要这样做。我不确定最终可能会出现堆栈溢出,但这并不能得到您想要的结果。您可能需要查找单例模式。这可能会对您有所帮助。

我使用cookie隐喻来解释对象和类

把计算机的内存想象成一大块饼干面团。(很好吃,不是吗?)

你们班是一个饼干切割工。只要你有面团(记忆),它就会产生特定大小和形状的饼干。对象是用饼干切割器切割的饼干

1) 蝙蝠车是对汽车对象的引用。它只能指向汽车或汽车的子类。它在创建时没有附加对象实例(面团)。当调用new Car()时,您会戳出一个对象实例,并将其指定给一个名为batmobile的引用。只有一个参考

2) 不要这样做。我不确定最终可能会出现堆栈溢出,但这并不能得到您想要的结果。您可能需要查找单例模式。这可能对你有帮助

现在我需要帮助理解当这个代码被调用两次时到底会发生什么

例如:
carbatmobile=新车()

将创建两个对象吗

每次执行该行时都会创建一个
Car
对象,因此如果执行两次,则会创建两个对象

如果是,第一个对象会发生什么情况

如果没有其他东西引用它,它就有资格被JVM进行垃圾收集。何时以及是否发生这种情况取决于JVM垃圾收集器中的许多因素

有人能详细解释一下类、对象和引用方面发生了什么吗

…声明类型为
Car
的变量。因为它是一种对象类型,所以变量最终将保存一个对象引用(或
null
,这意味着它不保存对任何对象的引用)。实际对象独立于任何可能引用它的变量而存在(一个对象可能有多个引用)。对象引用就像一个内存地址,表示对象在内存中的位置。(它不是一个内存地址,但很像一个。)

…创建一个新的
Car
对象,并调用
Car
构造函数对其进行初始化。因此:

Car batmobile = new Car();
…声明一个变量,创建一个对象,调用
Car
构造函数,并将对该对象的引用分配给
batmobile

这是一个无限循环吗

可能是这样,但最终会耗尽堆栈空间,因此这是一个堆栈溢出错误。该行调用
字母表
构造函数,它调用
字母表
构造函数,它调用
字母表
构造函数。。。你明白了

现在我需要帮助理解当这个代码被调用两次时到底会发生什么

例如:
carbatmobile=新车()

两个物体会得到crea吗
new Car();
Car batmobile = new Car();
var batmobile = new Car();
Public class Alphabet{
    Alphabet abc;

    Public Alphabet(){
        abc = new Alphabet();
    }
}
while (true) {
    Car batmobile = new Car();
}
Car batmobile = new Car();
SomeClass x;
SomeClass x = new SomeClass();
Public class Alphabet{
    Alphabet abc;

    Public Alphabet(){
        abc = new Alphabet();
    }
}
public static void main(String[] args){
    new Alphabet();
}