Разница между статическими и нестатическими переменными в Java

Опубликовано: 27 Декабря, 2021

В 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 и многому другому, см. Полный курс подготовки к собеседованию .