Определение переменных экземпляра и переменных класса
При объявлении переменных-членов те, которые изменены с помощью ключевого слова static, называются переменными класса. Переменные класса также называются статическими переменными или статическими переменными, а те, которые не изменяются с помощью ключевого слова static, называются переменными экземпляра.
Например:
classMain{floatx;//переменная экземпляра staticinty;//переменная класса}
Уведомление:
Ключевое слово static должно быть помещено перед типом переменной.
Разница между переменными экземпляра и переменными класса
1. Переменные экземпляра разных объектов отличаются друг от друга:
Класс может создавать несколько разных объектов с помощью нового оператора. Этим объектам будут присвоены разные переменные-члены. Переменные экземпляра, назначенные разным объектам, занимают разные области памяти. объекта.
2. Все объекты имеют общие переменные класса:
Если в классе есть переменные класса, при использовании оператора new для создания нескольких разных объектов переменные класса, назначенные этим объектам, занимают одну и ту же память. Изменение переменной класса одного объекта повлияет на класс других переменных. то есть объекты разделяют переменные класса.
3. Прямой доступ к переменным класса через имена классов:
При выполнении программы Java файл байт-кода класса загружается в память. Если класс не создает объект, переменным экземпляра в классе не будет выделена память. Однако переменным класса в классе выделяется соответствующее пространство памяти, когда класс загружается в память. Если этот класс создает объекты, то переменные экземпляра разных объектов отличаются друг от друга, то есть выделяются разные пространства памяти, и переменные класса больше не перераспределяют память. Все объекты разделяют переменные класса, то есть переменные класса. все объекты одинаковы. Пространство памяти, занимаемое переменными класса, не освобождается до выхода из программы.
Таким образом, доступ к переменной класса можно получить не только через объект, но и непосредственно через имя класса, тогда как к переменным экземпляра объекта можно получить доступ через объект, но не используя имя класса.