Часто люди, которые только начинают программировать на java, с трудом понимают, как и когда использовать статические переменные.

Итак, представьте, что у вас есть программное обеспечение для производства автомобилей, и в какой-то момент, когда вы хотите произвести автомобиль, в своем коде вы вызываете «Car car = new Car();»
И в какой-то момент вам захотелось узнать, сколько автомобилей выпущено.
Как бы вы реализовали этот функционал?

Статическая переменная пригодится. Вы объявляете статическое поле carCount в своем классе Car и увеличиваете его каждый раз, когда вызывается конструктор.

class Car {
    static int carCount= 0;

    public Car(){
        carCount++; //increasing every time a new Car is created
    }
}

Статическое поле carCount создается и инициализируется только один раз (объяснено ниже), но оно обновляется каждый раз, когда создается объект типа Car (carCount++ ). Таким образом, если вы создадите 1000 автомобилей, будет только одна переменная carCount.
А когда вам нужно получить доступ к переменной carCount, вам не нужно создавать объект класса Car, вы просто вводите Car .carCount.

А что, если вы не использовали static для поля carCount и объявили его следующим образом:

class Car {
    int carCount= 0;

    public Car(){
        carCount++; 
    }
}

Что ж, каждый раз, когда вы создаете автомобиль (объект типа Car), будет создаваться новая переменная carCount, ей присваивается значение 0, а в конструкторе увеличивается до 1, поэтому, если вы создаете 1000 объектов автомобилей, будет 1000 переменных carCount, каждая со значением 1. Нужно сказать, что это делает этот подход непригодным для подсчета произведенных автомобилей.

Таким образом, все, что объявлено статическим, принадлежит всему классу, а не какому-либо конкретному экземпляру (объекту) класса.

Статическая инициализация класса обычно происходит до первого создания экземпляра класса (объекта) или вызова статического метода класса,
или назначения статического поля класса… Существуют и другие способы принудительного статическая инициализация с использованием Class.forName, но это выходит за рамки этого простого руководства.

Проверьте мои приложения в Google Play Store или Amazon App Store