使用java中的对象,创建新对象后无法从main到达他

时间:2014-03-31 15:55:34

标签: java object

主要是我写了这两个陈述:

Account newAccount = new Account(name);
newAccount.addNewProduct();

这是Account中的构造函数代码和属性:

private final int MAX_PRODUCTS = 50; //Assumes no more than 50 products per customer
private String name;        //Name of the customer
private int sum;            //Sum amount of the purchase
private Product[] productList;      //List of products for a customer 
private int productCounter;         //Counter for number of products

public Account(String name)
{
    Product[] productList = new Product[MAX_PRODUCTS]; //New empty list of products of the customer }
    productCounter = 0;
    sum = 0;
    name = name;
}

我无法理解为什么,但在这种方法中:

public void addNewProduct()
{   
    System.out.println("Name is: " + this.name);
    productList[productCounter] = new Product();
    productCounter++;
} 

虽然我在控制台中输入了一个名字,但它将名称打印为null ... 它就像没有保存我创建的对象newAccount的属性。为什么呢?

2 个答案:

答案 0 :(得分:5)

name = name无效。您需要使用this.name = name

这是因为当你使用name时,你会引用构造函数中的参数;当您使用this.name时,请参阅该字段。

答案 1 :(得分:0)

正如Anubian Noob所说:

name = name不起作用,因为你要为同一个变量分配相同的值。

如果您收到姓名=" John",您正在做什么:

John = John。

这就是你需要使用它的原因,当你使用this.name = name时,你将接收到的值传递给你班级的局部变量。

所以如果你有这个:

private final int MAX_PRODUCTS = 50; //Assumes no more than 50 products per customer
private String name;        //Name of the customer
private int sum;            //Sum amount of the purchase
private Product[] productList;      //List of products for a customer 
private int productCounter;         //Counter for number of products

public Account(String name)
{
    Product[] productList = new Product[MAX_PRODUCTS];
    productCounter = 0;
    sum = 0;
    this.name = name;
}

您的值将存储在名为name的私有变量中。