Статические переменные Java

Статические переменные Java, объявляются внутри класса с ключевым словом static. Такие переменные, по существу, являются глобальными переменными. При объявлении объектов, копии статических переменных не создаются - создается одна статическая переменная на весь класс. Статическая переменная создается при загрузке класса.

Рассмотрим различие между обычными и статическими переменными на следующем примере. Для обращения к обычной переменной а, необходим объект класса StaticVars. К переменной b можно обращаться без упоминания объекта и даже без упоминания класса (если обращение происходит из того же класса):

public class StaticVars {
    int a;
    static int b;

    public static void main(String[] args) {
        StaticVars staticVars = new StaticVars();
        System.out.println(staticVars.a);
        System.out.println(b);
    }
}

При обращении к статической переменной из другого класса, необходимо указать имя ее класса - StaticVars.b. Можно обратиться к статической переменной используя любой объект того же класса, например - staticVars1.b или staticVars2.b. Но такой вариант не рекомендуется, так как пользователь вашего кода может решить, что это обычная переменная.

public class StaticVarsDemo {
    public static void main(String[] args) {
        StaticVars staticVars1 = new StaticVars();
        StaticVars staticVars2 = new StaticVars();

        System.out.println(StaticVars.b);
        System.out.println(staticVars1.b);

        staticVars1.b = 3;
        staticVars2.b = 4;

        System.out.println(staticVars1.b);
        System.out.println(staticVars2.b);
    }
}

Результат выполнения кода:

0
0
4
4

Рассмотрим классический пример, демонстрирующий использование статических переменных для подсчета количества созданных объектов класса Ball. Для этого определим в классе статическую переменную count, которая и будет содержать количество созданных объектов. При создании объекта всегда вызывается конструктор, поэтому именно там будем увеличивать переменную count. Для доступа к private переменной count определен метод getCount():

public class Ball {
    static int count = 0;
    String color = "none";

    public Ball(String color) {
        this.color = color;
        count++;
    }
}
public class BallDemo {
    public static void main(String[] args) {
        Ball ball1 = new Ball("красный");
        Ball ball2 = new Ball("голубой");
        System.out.println("Количество созданных объектов: "
                + Ball.count);
    }
}

Результат выполнения кода:

Количество созданных объектов: 2
Read also:
Comments