Java对象创建的区别

时间:2016-10-27 06:20:10

标签: java oop object-create

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

1

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

2

new ClassName().method();

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

4 个答案:

答案 0 :(得分:6)

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

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

要记住的一点是如果要多次访问相同的对象成员,则需要保留引用(使用上面的选项1),而不是创建对象(选项2)一次又一次(这是昂贵的操作,即占用记忆)。

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

答案 1 :(得分:0)

引用变量obj_name包含ClassName的对象。通过它可以通过引用变量obj_name调用ClassName的实例方法。

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

有关详情,请参阅此Link

答案 2 :(得分:0)

  • 选项1 中,您正在使用关键字创建对象 后跟构造函数,该对象由 class_name引用 obj_name 变量,因此obj_name指向该对象。
  • 选项2 中,您没有引用该对象。只是你做了一个 对象并调用没有引用的方法,以便对象是 有资格进行垃圾收集。

enter image description here

答案 3 :(得分: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;
    }
}

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

要了解两种方法之间的区别,让我们使用setAttr(200)将对象的attr更改为200.

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

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