【问题标题】:Java object creation differenceJava对象创建区别
【发布时间】:2017-03-09 17:14:13
【问题描述】:

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

1.

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

2.

new ClassName().method();

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

【问题讨论】:

  • 不同的是左边的变量存储了对ClassName...的引用。
  • @KevinEsche:谢谢伙计

标签: java oop object-create


【解决方案1】:

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

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

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

请参考以下链接了解更多详情: https://docs.oracle.com/javase/tutorial/java/javaOO/usingobject.html

【讨论】:

  • 感谢您的解释。很有帮助1
【解决方案2】:

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

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

详情请通过Link

【讨论】:

    【解决方案3】:
    • 选项 1 中,您正在使用 new 关键字创建对象 后跟构造函数,该对象由 class_name 引用 obj_name 变量,因此 obj_name 指向该对象。
    • 选项 2 中,您没有引用该对象。只要你做一个 对象并在没有引用的情况下调用该方法,以便该对象是 符合垃圾收集条件。

    【讨论】:

      【解决方案4】:

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

      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;
          }
      }
      

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2016-05-03
        • 1970-01-01
        • 1970-01-01
        • 2017-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-18
        • 1970-01-01
        相关资源
        最近更新 更多