Несколько отдельных объектов, созданных из одного класса

#java

#java

Вопрос:

Начинающий java-программист

Я создал класс Car

 public class Car {

  private static final double MILES_PER_YEAR = 20000;
  private static final double GAS_PRICE =  2.50;

  private static double pricePerYear;
  private static double totalPrice;

  public Car(double initialPrice, double milesPerGallon) {
    pricePerYear = (MILES_PER_YEAR / milesPerGallon);
    totalPrice = initialPrice;
}
  

Затем в моей основной функции я создаю два объекта Car

 Car civic = new Car(22000, 35.5);
Car prius = new Car(27135, 55.5);
  

Однако, когда я проверяю атрибуты этих объектов с помощью civic.getTotalPrice() и prius.getTotalPrice(), они всегда одинаковы. Вторая структура объекта всегда переопределяет первую, и когда я создаю их, как я делал выше ^^ и получаю обе цены, они оба возвращают 27135. Это происходит так же, как и наоборот, если я определяю их следующим образом

 Car prius = new Car(27135, 55.5);    
Car civic = new Car(22000, 35.5);
  

Для приведенного выше сегмента возврат как для civic.getTotalPrice(), так и для prius.getTotalPrice() составляет 22000

Я думаю, что проблема как-то связана с такими ключевыми словами, как public, private, static, void, final и т. Д. Поскольку я не совсем понимаю, что они означают, да, но я не понимаю, почему код все еще выполняется, если это такая проблема с ключевыми словами.

Моя главная цель — сравнить атрибуты отдельных объектов и изменить их по отдельности, если это поможет кому-нибудь понять, к чему я клоню.

Ответ №1:

Сделайте переменные-члены нестатическими:

 public class Car {
  private static final double MILES_PER_YEAR = 20000;
  private static final double GAS_PRICE =  2.50;

  private double pricePerYear;
  private double totalPrice;

  public Car(double initialPrice, double milesPerGallon) {
    pricePerYear = (MILES_PER_YEAR / milesPerGallon);
    totalPrice = initialPrice;
  }
}
  

static в частности, означает, что члены не принадлежат одному конкретному экземпляру, а вместо этого используются всеми ними. Это имеет смысл для таких значений, как MILES_PER_YEAR и GAS_PRICE : они всегда одинаковы, независимо от того, какой car вы определяете.

Комментарии:

1. Это имеет большой смысл, спасибо за помощь. Static намного проще, чем я изначально думал.