1

我是 Java 中 OOP 概念的新手。这两个事件有什么区别?

1.

ClassName obj_name = new ClassName();
obj_name.method();

2.

new ClassName().method();

非常感谢一个很好的解释。谢谢

4

4 回答 4

6

在 Option(1) 中,您仍然拥有/持有对对象的引用,因此您可以重用该引用来访问/调用对象(类)的其他成员(方法/变量)。

在选项(2)中,您没有参考(即参考已丢失),因此您将无法再次使用它。

要记住的一点是,如果你想多次访问同一个对象成员,你需要持有引用(使用上面的选项 1),而不是一次又一次地创建对象(选项 2)(这是昂贵的操作,即,占用内存)。

有关详细信息,请参阅以下链接: https ://docs.oracle.com/javase/tutorial/java/javaOO/usingobject.html

于 2016-10-27T06:25:18.350 回答
0

引用变量obj_name持有ClassName.through 的对象,您可以通过引用变量调用 ClassName 的实例方法obj_name

当我们创建一个对象并且不将其引用分配给任何引用变量时,它被称为匿名对象实例化。这种实例化类型的优点是您只能对其进行有限的操作。就像您可以调用单个方法一样。如果你想执行 mopre 操作,那么引用保存对象的 varaibale 是更好的方法。如果你的类中有多个方法并且你想使用它们,那么选项 1 是正确的选择。

详情请通过此链接

于 2016-10-27T06:36:50.540 回答
0
  • 选项 1中,您正在创建一个带有new关键字后跟构造函数的对象,并且该对象由class_name obj_name变量引用,因此 obj_name 指向该对象。
  • 选项 2中,您没有引用该对象。只需创建一个对象并在没有引用的情况下调用该方法,以便该对象有资格进行垃圾回收。

在此处输入图像描述

于 2016-10-27T06:44:56.227 回答
0

虽然它们可能在第一次调用时实现相同的目标,但两种方法在类定义和实例化方面做的事情根本不同。

ClassName object = new ClassName();`
object.method();`

这是一个实例化的例子。您创建一个新的 ClassName 对象,该对象拥有某些实例字段和方法。它可以调用这些方法,结果可能会导致其实例字段发生变化。

ClassName.method();

另一方面,这种方法不会创建类的实例。相反,它method作为类属性调用。因此,结果可以更改 ClassName 中的字段,但不一定会更改已实例化对象中的现有字段。

public class ClassName(){
    public int attr = 0;
    public ClassName(){}

    public void setAttr(int value){
        this.attr = value;
    }

    public void method(int value){
        this.attr += value;
    }
}

现在,使用第一种方法,我们可以创建 anewObj并调用newObj.method(100)。这将使newObj' 的实例变量attr增加 100。

要查看两种方法之间的区别,让我们setAttr(200)将对象的值更改attr为 200。

接下来,如果我们只使用ClassName.method(100),则对于所有未来的 ClassName 实例,该类的attr值将变为 100。所以如果我们创建ClassName nextObj = new ClassName(),这个新的 ClassName 实例将有attr100 个,而newObj仍然有attr200 个。

希望这能解释这两种方法之间的核心区别。

于 2016-10-27T07:56:11.767 回答