Подтвердить что ты не робот

Окончательный и статический в Java

Я прочитал это предложение в книге, но я этого не понял:

Поле, которое является как статическим, так и окончательным, имеет только одну часть хранилища, которая не может быть изменена.

Может ли кто-нибудь объяснить это мне?

4b9b3361

Ответ 1

Источником вашей путаницы может быть то, что слово "статический" на английском языке, и это значение на Java только слабо связано.

Переменная, определенная в классе Cat в "нормальном" способе, может упоминаться как переменная экземпляра.

class Cat {
   int weight;
}

Каждый раз, когда вы создаете новый объект типа Cat, вы создаете новую копию переменной "weight". Если вы создаете 10 объектов типа Cat, каждая из них имеет собственную копию весовой переменной.

"Статическая" переменная может рассматриваться как переменная уровня класса, в отличие от переменной экземпляра. Статическая переменная имеет только одну копию и относится к классу Cat, а не к одной копии для каждого объекта типа Cat.

class Cat {
   static String speciesName;

   int weight;
}

Здесь, независимо от того, сколько объектов типа Cat мы создаем, существует только одна копия видаName.

Если статическая переменная также является "окончательной", эта копия переменной является единственной частью хранилища, которая не может быть изменена. Если переменная "вес" была окончательной в приведенном выше примере, было бы 10 единиц хранения, которые нельзя было бы изменить - по одному для каждого объекта типа Cat, который мы создали.

Ответ 2

A static переменная является общей для всех экземпляров класса. A final переменная не может измениться после ее установки в первый раз.

Итак, переменная static final в Java является общей для всех экземпляров класса и не может быть изменена после того, как она была установлена ​​в первый раз.

class Car {

    static final int numberOfWheels = 4;
    Color color;

    public Car(Color color) {
        this.color = color;
    }
}

Car redCar = new Car(Red);
Car blueCar = new Car(Blue);

Каждый автомобиль теперь имеет одно индивидуальное и переменное свойство color, и они делят свойство numberOfWheels, которое нельзя изменить.

Ответ 4

  • Финал означает, что нельзя повторно назначить значение для любой переменной
  • Статический означает, что только одна копия ссылки может быть целиком в классе всех методов.