работая с объектами в Java, после создания нового объекта не могу связаться с ним из основного

1

в основном я написал эти два утверждения:

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, который я создал. Зачем?

Теги:
object

2 ответа

5
Лучший ответ

name = name не будет работать. Вам нужно использовать this.name = name

Это связано с тем, что при использовании name вы ссылаетесь на параметр в конструкторе; когда вы используете this.name вы ссылаетесь на это поле.

  • 1
    ооо так, если я напишу в методе decleration: public Account (String newName). а затем имя = новое имя. все будет хорошо?
  • 1
    @YuvalLevy да :)
Показать ещё 1 комментарий
0

Так же, как Анубский Нооб говорит:

name = name не будет работать, потому что вы оцениваете одно и то же значение для одной и той же переменной.

Если вы получите имя = "Джон", то что вы делаете:

Джон = Джон.

Для этого вам нужно использовать это, когда вы используете 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.

  • 0
    Что это добавляет к другому ответу? Если у вас есть предложение; прокомментируйте это там, иначе это излишне.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню