我需要一个返回类的新对象的方法。该方法在另一个类中(我使用java)。
例如:
public Sale newSale(){
Sale sale1 = new Sale();
}
我担心当我两次使用此方法时,我只会有一个对象,因为它具有相同的名称(sale1
)。
是否有替代方案或者不可能这样做?
答案 0 :(得分:3)
每次调用方法时,此行都将执行:
Sale sale1 = new Sale();
...将创建一个全新的对象,在所有中使用相同的变量名称无关紧要 - 将分配一个新对象,事实相同名称被重用是无关紧要的;对象未由其名称定义。现在你只需要在结束时返回它:
return sale1;
答案 1 :(得分:2)
每次调用Sale
时都会创建一个新的new Sale()
对象。
public Sale newSale(){
Sale sale1 = new Sale();
return sale1;
}
您可以使用以下方法进行测试:
if(newSale() == newSale()){
System.out.println("It's the same object!");
} else {
System.out.println("They are distinct objects");
}
答案 2 :(得分:0)
不要害怕,名称sale1
仅在每次执行方法时在本地使用一次,并且您将始终获得一个新对象。无论是谁调用newSale
,每次通话都会有一个新的Sale
实例。
现在,这是非常基本的Java,在向全世界询问之前,你应该更多地掌握Java;)
答案 3 :(得分:0)
public Sale newSale(){
return new Sale();
}
每次制作new()
时,您都会创建一个新对象,不要对引用感到困惑。
阅读教程。
答案 4 :(得分:0)
你永远不会真正退回sale1,但如果你这样做,他们就会成为不同的对象。 暂时持有对象的变量名称(技术上是对象的引用)并不会影响该对象的实际内容。
请记住,变量的名称与对象的名称不同。例如,请考虑以下代码:
Sale sale1=new Sale();
Sale sale2=sale1;
你真的有2个变量引用的1个对象。该对象不是Sale1或Sale2,它是由两者引用的自己的实体。
每当您看到new
关键字时,就会创建一个新对象(每当该代码行运行时)
答案 5 :(得分:0)
基本上它可以工作,但你必须返回新创建的对象。
但我认为你并不真正了解OOP是如何运作的。
public class Person {
private String personName;
//Cobstructor
public Person(String name) {
this.personName = name;
}
//Access name of person
public String getName() {
return this.personName;
}
}
这只是一个基本的人类,有一个简单的构造函数和一个我们可以通过“getName()”访问的私有变量。
public class PersonCreator {
//Constructor
public PersonCreator() {
//Empty constructor
}
//Create a new person
public Person createPerson(String name) {
//Create new instance of class " Person"
Person aNewPerson = new Person(name);
//Return the new instance which has been created by the Java VM and is more or less indepent of the identifier
return aNewPerson;
}
}
因此,如果您创建PersonCreator类的实例并使用其方法“createPerson(String name)”,则每次返回具有不同变量值的完整新对象等。仅举例:
//Create instance of PersonCreator
PersonCreator pc = new PersonCreator();
//Create two independent, different persons
Person p1 = pc.createPerson("Jeff");
Person p2 = pc.createPerson("Paul");
//Print names of persons
System.out.println(p1.getName());
System.out.println(p2.getName());
输出将是:
Jeff
Paul
正如您所看到的,您使用这段代码创建,类似于您的一个不同的独立实例。
您甚至可以检查这两个实例/对象的地址:
//Print addresses
System.out.println(p1);
System.out.println(p2);
输出将是一些不同的memoty地址。这证明您创建了两个不相同的对象。
此外,您必须提到您的标识符“sale1”仅标识方法中的对象。这就像婴儿出生在医院,这里的医院是你的方法。他们离开了医院,这是你的回归。但他们在医院里都可以有相同的名字,比如爱德华。它们是不同的,因为它们有不同的父母,出生日期等。这由Java VM和内存地址“处理”。
我建议你阅读一些关于OOP的基本文章,了解它是如何正常工作的。你甚至可以尝试一些简单的代码,就像我在这个答案中理论上为你做的那样。