final и static в Java
Я прочитал это предложение в книге, но я не понял его:
поле, которое является как статическим, так и окончательным, имеет только одну часть хранилища, которую нельзя изменить.
кто-нибудь может объяснить это для меня?
4 ответов
источником вашей путаницы может быть то, что слово "static" на английском языке и его значение на Java только слабо связаны.
переменную, определенную в классе Cat "обычным" способом, можно назвать переменной экземпляра.
class Cat {
int weight;
}
каждый раз, когда вы создаете новый объект типа Cat, вы создаете новую копию переменной 'weight'. Если вы создаете 10 объектов типа Cat, каждый из них имеет свою собственную копию переменной веса.
а статическая переменная может следует рассматривать как переменную уровня класса, в отличие от переменной экземпляра. Статическая переменная имеет только одну копию и принадлежит самому классу Cat, а не одной копии для каждого объект типа Cat.
class Cat {
static String speciesName;
int weight;
}
здесь, независимо от того, сколько объектов типа Cat мы создаем, существует только одна копия speciesName.
Если статическая переменная также является "окончательной", то эта копия переменной является единственной частью хранилища, которую нельзя изменить. Если переменная " вес " были заключительными в приведенном выше примере, было бы 10 единиц хранения, которые не могут быть изменены-по одному для каждого объекта типа Cat, который мы создали.
A static
переменная является общей для всех экземпляров класса. А 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
который нельзя изменить.
см. раздел "константы" для объяснения на этой странице:
http://download.oracle.com/javase/tutorial/java/javaOO/classvars.html
- финал означает, что не может повторно назначить значение любой переменной
- Static означает, что только одна копия ссылки может быть в целом в классе всех методов.