Разница между статическими и нестатическими переменными в Java
В Java есть три типа переменных:
- Локальные переменные
- Переменные экземпляра
- Статические переменные
Локальные переменные и переменные экземпляра вместе называются нестатическими переменными. Следовательно, можно также сказать, что переменные Java можно разделить на 2 категории:
- Статические переменные: когда переменная объявлена как статическая, создается одна копия переменной, которая используется всеми объектами на уровне класса. Статические переменные - это, по сути, глобальные переменные. Все экземпляры класса используют одну и ту же статическую переменную.
Важные моменты для статических переменных: -
- Мы можем создавать статические переменные только на уровне класса. Посмотреть здесь
- статический блок и статические переменные выполняются в том порядке, в котором они присутствуют в программе.
Ниже приведена программа на Java, демонстрирующая, что статический блок и статические переменные выполняются в том порядке, в котором они присутствуют в программе.
// Java program to demonstrate execution
// of static blocks and variables
class
Test {
// static variable
static
int
a = m1();
// static block
static
{
System.out.println(
"Inside static block"
);
}
// static method
static
int
m1()
{
System.out.println(
"from m1"
);
return
20
;
}
// static method(main !!)
public
static
void
main(String[] args)
{
System.out.println(
"Value of a : "
+ a);
System.out.println(
"from main"
);
}
}
Выход:
от m1 Внутри статического блока Значение a: 20 из основного
- Нестатическая переменная
- Локальные переменные : переменная, определенная в блоке, методе или конструкторе, называется локальной переменной.
- Эти переменные создаются, когда блок вводится, или функция вызывается и уничтожается после выхода из блока, или когда вызов возвращается из функции.
- Область видимости этих переменных существует только внутри блока, в котором объявлена переменная. т.е. мы можем получить доступ к этой переменной только внутри этого блока.
- Инициализация локальной переменной обязательна.
- Переменные экземпляра: переменные экземпляра являются нестатическими переменными и объявляются в классе вне любого метода, конструктора или блока.
- Поскольку переменные экземпляра объявляются в классе, эти переменные создаются при создании объекта класса и уничтожаются при уничтожении объекта.
- В отличие от локальных переменных, мы можем использовать спецификаторы доступа для переменных экземпляра. Если мы не укажем спецификатор доступа, будет использоваться спецификатор доступа по умолчанию.
- Инициализация переменной экземпляра не является обязательной. Его значение по умолчанию - 0.
- Доступ к переменной экземпляра можно получить только путем создания объектов.
Пример :
// Java program to demonstrate
// non-static variables
class
GfG {
// non-static variable
int
rk =
10
;
public
static
void
main(String[] args)
{
// Instance created inorder to access
// a non static variable.
Gfg f =
new
Gfg();
System.out.println(
"Non static variable"
+
" accessed using instance"
+
" of a class"
);
System.out.println(
"Non Static variable "
+ f.rk);
}
}
Выход:Доступ к нестатической переменной осуществляется с помощью экземпляра класса. Нестатическая переменная 10
- Локальные переменные : переменная, определенная в блоке, методе или конструкторе, называется локальной переменной.
Основные различия между статическими и нестатическими переменными:
Статическая переменная | Нестатическая переменная |
---|---|
Доступ к статическим переменным можно получить, используя имя класса | Доступ к нестатическим переменным можно получить с помощью экземпляра класса |
К статическим переменным можно получить доступ статическими и нестатическими методами. | К нестатическим переменным нельзя получить доступ внутри статического метода. |
Статические переменные уменьшают объем памяти, используемый программой. | Нестатические переменные не уменьшают объем памяти, используемый программой. |
Статические переменные используются всеми экземплярами класса. | Нестатические переменные относятся к этому экземпляру класса. |
Статическая переменная похожа на глобальную переменную и доступна для всех методов. | Нестатическая переменная похожа на локальную переменную, и к ним можно получить доступ только через экземпляр класса. |
Вниманию читателя! Не прекращайте учиться сейчас. Ознакомьтесь со всеми важными концепциями Java Foundation и коллекций с помощью курса "Основы Java и Java Collections" по приемлемой для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .