我是Java新手中的OOP概念。这两起事件有什么区别?
1
ClassName obj_name = new ClassName();
obj_name.method();
2
new ClassName().method();
非常感谢一个很好的解释。感谢
答案 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)
答案 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。
希望这能解释两种方法之间的核心差异。