Статические поля (static fields)

Тренажер по Java для пользователей с начальным уровнем подготовки.

Тренажер по Java

Здесь разбираем static поля в Java: общие данные, которые принадлежат классу, а не объектам. Это важно для счётчиков, общих настроек и констант. Доступ возможен через имя класса: ClassName.field, а значение разделяется всеми экземплярами. Пример: если поле-счётчик увеличивать в конструкторе, то оно будет расти при создании каждого объекта. В задачах и тренажёре Java онлайн часто проверяют понимание: где хранится значение, когда оно меняется и как влияет на разные объекты.

Список тем

1. Доступ к static полю через класс

id: 40485_sf_01_static_access

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

Нужно правильно расставить в пропуски предложенные варианты
public class StaticDemo {
    public input1S int count = 0;

    public static void main(String[] args) {
        StaticDemo obj1 = new StaticDemo();
        StaticDemo obj2 = new StaticDemo();

        System.out.println(input2S.input3S);
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Исправь обращение к static

id: 40485_er_02_static_in_instance

В данном фрагменте кода на Java допущена ошибка, связанная с некорректным обращением к статическому полю. Статические поля принадлежат классу в целом, а не конкретным экземплярам, поэтому обращение к ним имеет свои особенности. Найдите и исправьте строку с ошибкой, чтобы программа корректно вывела значение статического поля на экран.

Найдите ошибку и исправьте
public class Counter {
    static int count = 0;
 
    public static void main(String[] args) {
        Counter obj = new Counter();
        System.out.println(this.count);
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

3. Что выведет этот код?

id: 40485_pr_03_counter_instances

Проанализируйте приведённый ниже код на Java. Обратите внимание на использование статического поля для подсчёта количества созданных объектов класса. Определите, что будет выведено на консоль после выполнения метода main. Выберите один правильный вариант из предложенных.

Выберите правильный вариант ответа
class Counter {
    private static int count = 0;

    public Counter() {
        count++;
    }

    public static int getCount() {
        return count;
    }
}

public class Main {
    public static void main(String[] args) {
        Counter c1 = new Counter();
        Counter c2 = new Counter();
        Counter c3 = new Counter();
        System.out.println(Counter.getCount());
    }
}
Сообщения
Проверить
Показать подсказку

4. Разметь: static поле, поле объекта, конструктор

id: 40485_hp_04_mark_static_parts

В данном фрагменте кода Java выделены несколько элементов. Разметьте каждый выделенный элемент, указав, является ли он static полем, полем экземпляра (объекта), конструктором, вызовом конструктора или обращением к полю. Обратите внимание на ключевые слова и контекст использования каждого элемента.

Кликните по каждому выделенному фрагменту и выберите для него подходящий тип из списка под текстом.
public class Counter {
    static int {{count~|~t1}} = 0;
    int {{value~|~t2}};

    {{public Counter(int value) {~|~t3}}
        this.value = value;
        count++;
    }

    public static void main(String[] args) {
        Counter c1 = {{new Counter(10);~|~t4}}
        System.out.println({{c1.value~|~t5}});
        System.out.println({{Counter.count~|~t6}});
    }
}
Static поле
Поле экземпляра
Вызов конструктора
Конструктор
Обращение к полю
Сообщения
Проверить
Показать подсказку

5. Собери класс со static полем и выводом

id: 40485_bp_05_class_with_static

Из предложенных строк соберите корректную java-программу, которая объявляет класс MyClass со статическим полем count, создаёт объект этого класса в методе main и выводит значение статического поля. Одна из строк является лишней и приведёт к ошибке компиляции, поэтому её не нужно включать в решение.

Перетяните в правильном порядке строки из одного блока в другой
public class MyClass {
    static int count = 5;
    int nonStaticField = 10;
    public static void main(String[] args) {
        MyClass obj = new MyClass();
        System.out.println(MyClass.count);
        System.out.println(nonStaticField);
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

6. Порядок: инициализация static и создание объектов

id: 40485_sq_06_lifecycle_steps

Перед вами описаны шаги, которые происходят при запуске Java-программы, использующей статические поля. Эти шаги перемешаны. Восстановите правильную последовательность событий, начиная с загрузки класса и заканчивая выводом значения. Учтите порядок инициализации статических полей, выполнения метода main и создания объектов.

Расставьте строки в правильном порядке
Класс загружается в память с помощью ClassLoader.
Выводится текущее значение статического поля (например, через System.out.println).
Создаётся объект класса (вызывается конструктор, инициализируются нестатические поля).
Выполняется метод main (точка входа в программу).
Статическое поле класса инициализируется (например, через статический блок или прямое присваивание).
Статическое поле изменяется (например, через обращение к нему из объекта или класса).
Сообщения
Проверить
Показать подсказку

7. Итоговое значение static поля

id: 40485_gr_07_static_final_value

Проанализируйте приведённый фрагмент кода на Java. Обратите внимание на статическое поле класса, которое изменяется несколько раз: в конструкторе при создании объектов и непосредственно в методе main. Определите, какое значение будет выведено на экран после выполнения программы. Введите одно число без дополнительных символов.

Что должно получиться?
public class Main {
    static int counter = 0;
    public Main() {
        counter++;
    }
    public static void main(String[] args) {
        new Main();
        new Main();
        new Main();
        counter += 5;
        System.out.println(counter);
    }
}
Сообщения
Проверить
Показать подсказку
НайтиКурс.Ру