Я очень плохо знаком с Java и хочу понять разницу между переменными класса и переменными экземпляра.
Например:
class Bicycle {
static int cadence = 0;
int speed = 0;
int gear = 1;
}
Чем переменные экземпляра и переменные класса отличаются друг от друга? Какие переменные здесь являются переменными класса, а какие переменными экземпляра? Как это влияет на сферу?
Ответы:
Они оба являются переменными- членами , что означает, что оба связаны с классом. Теперь, конечно, есть различия между ними:
Переменные экземпляра:
Эти переменные принадлежат экземпляру класса , то есть объекта. И каждый экземпляр этого класса (объекта) имеет свою собственную копию этой переменной. Изменения, внесенные в переменную, не отражаются в других экземплярах этого класса.
Переменные класса:
Они также известны как статические переменные-члены, и существует только одна копия этой переменной, которая используется всеми экземплярами этого класса. Если в эту переменную будут внесены изменения, все остальные экземпляры увидят эффект изменений.
Полный пример:
Выход будет:
Теперь измените переменную экземпляра на переменную класса, сделав ее статической:
Я использовал нестатические методы, чтобы получить и установить значение,
Barcode
чтобы можно было вызывать его из объекта, а не из класса. Вывод будет следующим:источник
Это объясняется здесь (с примером
Bicycle
класса с переменными классаnumberOfBicycles
и переменными экземпляраcadence
,speed
,gear
&id
):Переменная класса (объявленная
static
) является местоположением, общим для всех экземпляров.В примере
numberOfBicycles
это переменная класса (так как она объявленаstatic
). Существует только одна такая переменная (т.е. местоположение), общая для всех экземпляров и для класса. Поэтому, если вы изменитеnumberOfBicycles
один метод, другие методы увидят новое значение (даже для разныхBicycle
объектов).В отличие от
gear
&id
являются переменными экземпляра (потому что их объявление не имеетstatic
модификатора). У каждогоBicycle
объекта есть свой. Если вы изменяетеgear
для некоторогоBicycle
a , и если b - другой экземпляр, изменениеa.gear
не влияет наb.gear
Каждый объект Java представляет собой отдельную зону памяти с некоторыми метаданными (например, некоторой ссылкой на его класс) и собственными переменными экземпляра (возможно, унаследованными от суперкласса). Но переменные класса являются общими для класса и общими для всех экземпляров.
См. Также Вики-страницы переменных объекта (информатика) и экземпляра .
источник
Переменная экземпляра:
Переменная экземпляра имеет отдельное значение для каждого экземпляра класса.
Переменная класса:
И наиболее важная переменная класса поддерживает одно общее значение для всех экземпляров класса, даже если не существует объекта экземпляра класса.
Краткая разница между переменной класса и переменной экземпляра:
источник
Разница между
class variables
иinstance
переменными, это просто вопросwho knows what?
.An
instance variable
известен только (= привязан ) к этому конкретному экземпляру - отсюда и имя.Определение класса похоже на план создания конкретных объектов. Возможно, этот момент вас немного смущает . Но если написать это так, каждая переменная будет привязана к своему конкретному объекту: например, у каждого человека есть свое первое имя
С
class variable
другой стороны, как следует из названия, он известен каждому члену класса; или технически: это известно / связано на уровне класса . Типичный пример - счетчик количества созданных вами объектов - хотя это очень проблемный пример; но это не имеет значения на этой ранней стадии.numberOfPersons
объявляется,static
что является ключевым словом для distingush междуclass variables
иinstance variabes
. Переменная объявляется как и другие в определении класса. Ноstatic
ключевое слово сигнализирует, что оно другое.firstName
,lastName
Являются переменными экземпляра и привязывается к этому примеру бетонаnumberOfPersons
привязан к классу, чтобы каждый экземпляр мог получить доступ к этой переменной.ТЛ; др
Место, где определены переменные, - это определение класса.
Переменные класса известны в / привязаны к уровню класса, то есть каждый конкретный экземпляр имеет доступ к нему. Чтобы определить переменную класса, вы используете ключевое слово
static
.Переменные экземпляра известны только на уровне экземпляра. Вы определяете их без
static
ключевого слова.Дальнейшая документация для Java здесь
источник