JavaRush/Курси/Java Core/Порядок завантаження класів, статичні дані

Порядок завантаження класів, статичні дані

Рівень 5, Лекція 7
Відкрита

— З цієї лекції ти дізнаєшся про завантаження класів до пам'яті.

Класи в Java – це файли на диску, що містять байт-код – скомпільований Java-код.

— Так, я пам'ятаю.

— Java-машина не завантажує їх без потреби. Як тільки десь у коді відбувається звернення до класу, Java-машина перевіряє – чи він завантажений. І якщо ні, то завантажує та ініціалізує його.

Ініціалізація класу – це присвоєння значень всіх його статичних змінних та виклик всіх статичних блоків.

— Схоже на виклик конструктора в об'єкта. А що таке статичний блок?

— Якщо для ініціалізації змінних об'єкта потрібно виконати складний код (наприклад, щось завантажити з файлу), ми можемо це зробити в конструкторі. Статичні змінні такої можливості не мають. Але оскільки потреба в цьому залишилася, до класів можна додати статичний блок або блоки, які по суті своїй еквівалентні виклику статичних конструкторів.

Ось як це виглядає:

Код Що відбувається насправді
class Cat {
    public static int catCount = 0 ;
    public static String namePrefix;

    static {
        Properties p = new Properties();
        p.loadFromFile("cat.properties");
        namePrefix = p.get("name-prefix");
    }

    public static int maxCatCount = 50;

    static {
        Properties p = new Properties();
        p.loadFromFile("max.properties");
        if (p.get("cat-max") != null)
            maxCatCount = p.getInt("cat-max");
    }

}
class Cat {
    public static int catCount;
    public static String namePrefix;
    public static int maxCatCount;

    //статичні конструктори в Java
    //заборонені, але якби вони були, то все
    //виглядало б так
    public static Cat() {
        catCount = 0;

        Properties p = new Properties();
        p.loadFromFile("cat.properties");
        namePrefix = p.get("name-prefix");

        maxCatCount = 50;

        Properties p2 = new Properties();
        p2.loadFromFile("max.properties");
        if (p2.get("cat-max")!=null)
            maxCatCount = p2.getInt("cat-max");
    }
}
4
Задача
Java Core,  5 рівень7 лекція
Недоступна
ua: Набираем код Ӏ Java Core: 5 уровень, 7 лекция
ua: Внимание! Объявляется набор кода на JavaRush. Включите режим повышенной внимательности, расслабьте пальцы, читайте код и… набирайте его в соответствующем окошке. Набор кода — не бесполезное занятие, как может показаться на первый взгляд: вы привыкаете к синтаксису и запоминаете его (современные IDE редко дают вам это сделать).

Це дуже схоже на те, що відбувається під час виклику конструктора. Я навіть записав це у вигляді неіснуючого статичного конструктора.

— Так, я все зрозумів.

— Чудово.

Коментарі
  • популярні
  • нові
  • старі
Щоб залишити коментар, потрібно ввійти в систему
Для цієї сторінки немає коментарів.