Как я могу установить одинаковую переменную для всех созданных объектов одного и того же типа?

#java

#java

Вопрос:

Допустим, у меня есть класс, который я вызвал Car . В этом классе есть методы и другие переменные. У меня есть вызываемая переменная make , которая всегда должна быть одинаковой для всех Car объектов. Единственная проблема в том, что я хочу знать, каким будет make до Car инициализации объекта. Я пытался использовать static, но, должно быть, у меня неправильное представление о том, как функционируют статические методы и статические переменные. Я попытался вызвать статический метод, который устанавливает статическую переменную, но когда я создаю Car объект, он не работает.

пример: Car.setMake("Toyota")

Где статический метод setMake() устанавливает статическую переменную make . Тогда я бы создал new Car() и ожидал, что все Car объекты будут make иметь «Toyota». Это не работает.

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

1. Пожалуйста, отредактируйте вопрос и покажите код о том, как вы используете static

2. Похоже, было бы разумнее создать экземпляр factory.

3. @OldProgrammer нет, Олег понял это.

Ответ №1:

Вы правы насчет static переменных. Проверьте это еще раз. Static переменные и модули привязаны к самому Class себе, и все экземпляры Class имеют одинаковые значения. Static методы имеют доступ только к static переменным и методам, но non-static методы имеют доступ к static и non-static переменным и методам.

 public static void main(String... args) {
    Car audi = new Car();
    Car bmw = new Car();
    System.out.println(Car.getMake());  // null
    Car.setMake("Toyota");
    System.out.println(Car.getMake());  // Toyota
    System.out.println(audi.getMake()); // Toyota
    System.out.println(bmw.getMake());  // Toyota
}

class Car {

    private static String make;

    public static void setMake(String make) {
        Car.make = make;
    }

    public static String getMake() {
        return make;
    }

}
  

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

1. Ах, я вижу, что я вызывал статический метод перед созданием экземпляра Car объекта!

2. @ErlichBachman это не имеет значения. Вы можете записывать и читать static переменные даже до первого экземпляра класса.