java中的引用和对象有什么区别?

我有类GUI,所以我可以创建这样的对象:

GUI g1 = new GUI(); 

和这样的引用变量:

 GUI g2; 

现在据我所知,g2是一个引用变量,它引用了GUI类,g1是GUI类的一个对象。 g1和g2有什么区别? 我可以使用GUI类的属性与对象,但g2的可能用途是什么?

参考文献是名称。 对象是东西。 对于东西,你可以有不同的名称,即使对于实际上不存在的东西也是如此。

您可以声明名称,而不实际赋予它们任何“真实”含义,如下所示:

 GUI g1; 

您可以使用=运算符将名称(要引用的真实内容)分配给名称:

 GUI g1 = some_gui; 

名称可以随时间改变其含义。 同名可以在历史的不同点引用不同的东西。

 GUI g1 = some_gui; doSomething(); g1 = some_other_gui; 

还有同义词:多个名称可以引用相同的东西:

 GUI g2 = g1; 

这几乎就是参考文献的作用。 它们是用来指代东西的名字。

可以创建东西:

 new GUI(); 

可以在现场创建和命名东西供以后参考(字面意思!):

 GUI g1 = new GUI(); 

可以使用其名称(或其任何名称)来引用内容:

 g1.doSomething(); g2.doSomethingAgain(); 

可以创建相同类型(类)的不同内容,并以不同方式命名:

 GUI g1 = new GUI(); GUI g2 = new GUI(); GUI g3 = new GUI(); GUI g1_synonym = g1; 

🙂

java中的引用和对象有什么区别?

引用是提供访问其类型对象的方法的实体。 对象是一种实体,它提供了访问其类或类型成员的方法。

通常,如果没有对象的引用,则无法访问该对象。

 class GUI { void aMethod() { // some business logic. } } 

您可以aMethod有或没有引用的情况下调用aMethod 。 但你肯定需要一个物体。

没有参考:

 new GUI().aMethod(); // you can't reuse the object // bad way to code. 

供参考:

 GUI aGUIReference = new GUI(); aGUIReference.aMethod(); // Now, the object can be reused. // Preferred way to code 

现在对你的代码行做一点解释:

 GUI g1 = new GUI(); // g1 is a reference to an object of GUI class. GUI g2; // g2 is a reference that can point to an object of GUI class // but currently not pointing to any. 

b / w g1g2的唯一区别是g1用对象初始化但g2指向null

 g2 = g1; // it means g2 will point to the same object g1 is pointing to // only one object but two references. 

在为对象分配对象之前,您无法使用g2 ,因为当前它不指向任何对象,而g1已经指向GUI对象,您可以使用它。

这个:

 GUI g1 = new GUI(); 

几乎相当于:

 GUI g1; g1 = new GUI(); 

References是指向称为objects.的内存块的指针objects.

 GUI g1 = new GUI(); 

为了解释,让我打破上述说法。

 GUI g1; g1 = new GUI(); 

第1步: g1是一个引用变量(指针),尚未指向任何有效的内存位置。

第二步:第二步为类GUI对象分配内存,赋值操作使引用变量g1指向该对象(内存位置)。 new关键字为类GUI的对象分配内存。

对象就像是在称为堆的空间中浮动的气泡。 变量只是这些气泡的链接。 表达式new GUI()创建一个对象, =运算符将其链接到变量g1g2也是一个变量,但它没有链接到任何对象。 你可以通过写作轻松交换它们

 g2 = g1; g1 = null; 

现在g2指的是g1在开头引用的对象,而g1指的是什么都没有。 对象完好无损,只更改了变量。

实际上,你的变量的Java名称是一个引用(基本类型除外)。 你不能使用g2因为它没有被初始化,甚至不是null。 尝试为g2调用方法时,会出现编译时错误。 GUI g2; g2没有指向内存中的对象。 如果你将g2设置为null,就像这样GUI g2 = null; 你可以在声明后使用它,但如果你为g2调用一个方法,你将得到一个运行时NullPointerException。

参考文献是名称。 对象是东西。 对于东西,你可以有不同的名称,即使对于实际上不存在的东西也是如此。

您可以声明名称,而不实际赋予它们任何“真实”含义,如下所示:

 GUI g1; 

名称可以随时间改变其含义。 同名可以在不同时间引用不同的东西。

 GUI g1 = some_gui; doSomething(); g1 = some_other_gui; 

这几乎就是参考文献的作用。 它们是用来指代东西的名字。

可以创建东西:

 new GUI(); 

可以在现场创建和命名东西供以后参考(字面意思!):

 GUI g1 = new GUI(); 

🙂

引用是一个“挂钩”,您可以在其上挂起对象。 对象可以在多个钩子上。

g1和g2都是参考文献。 但g2未初始化,因此无法在代码中使用。

 //Tells that g1 g2 should hold Gui object. Currently they are not holding any object. Gui g1; Gui g2; //Now g1 reference holds object. g2 reference still doesn't point to any object. g1 = new GUI();