制作另一个类的对象的方法

时间:2015-02-24 20:04:23

标签: java class methods constructor

我需要一个返回类的新对象的方法。该方法在另一个类中(我使用java)。

例如:

public Sale newSale(){
   Sale sale1 = new Sale();
}

我担心当我两次使用此方法时,我只会有一个对象,因为它具有相同的名称(sale1)。

是否有替代方案或者不可能这样做?

6 个答案:

答案 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()时,您都会创建一个新对象,不要对引用感到困惑。

阅读教程。

(推荐http://www.java-made-easy.com/

答案 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的基本文章,了解它是如何正常工作的。你甚至可以尝试一些简单的代码,就像我在这个答案中理论上为你做的那样。