Last active
August 30, 2025 12:06
-
-
Save sunmeat/eade02f5ebfba2b69b7e to your computer and use it in GitHub Desktop.
static initializer block
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package com.alex.static; | |
| // клас для демонстрації статичних блоків ініціалізації | |
| class StaticFields { | |
| // статичне поле з початковим значенням | |
| private static int a = 3; | |
| // статичне поле без початкового значення | |
| private static int b; | |
| // нестатичне поле | |
| private int c; | |
| // перший статичний блок ініціалізації | |
| static { | |
| System.out.println("статичний блок ініціалізації 1 викликано"); | |
| b = 15; // ініціалізація статичного поля b | |
| // a = c; // помилка: не можна звертатися до нестатичних полів | |
| System.out.println("b ініціалізовано значенням: " + b); | |
| } | |
| // другий статичний блок ініціалізації :)) | |
| static { | |
| System.out.println("статичний блок ініціалізації 2 викликано"); | |
| a = b * 2; // обчислення нового значення для a на основі b | |
| System.out.println("a переініціалізовано значенням: " + a); | |
| } | |
| // конструктор для ініціалізації нестатичного поля | |
| StaticFields() { | |
| c = 20; // ініціалізація нестатичного поля c | |
| System.out.println("конструктор викликано"); | |
| } | |
| // звичайний метод для виведення значень полів | |
| public void commonMeth() { | |
| System.out.println("звичайний метод:"); | |
| System.out.println("a = " + a); | |
| System.out.println("b = " + b); | |
| System.out.println("c = " + c); | |
| } | |
| // статичний метод для виведення значень статичних полів | |
| public static void staticMeth() { | |
| System.out.println("статичний метод:"); | |
| System.out.println("a = " + a); | |
| System.out.println("b = " + b); | |
| // System.out.println("c = " + c); // помилка: не можна звертатися до нестатичних полів | |
| } | |
| } | |
| // головний клас для демонстрації роботи статичних блоків | |
| public class Main { | |
| public static void main(String[] args) { | |
| // виведення привітання | |
| System.out.println("привіт із main!"); | |
| // доступ до статичних полів без створення об'єкта | |
| System.out.println("\nдоступ до статичних полів напряму:"); | |
| System.out.println("StaticFields.a = " + StaticFields.a); | |
| System.out.println("StaticFields.b = " + StaticFields.b); | |
| // System.out.println(StaticFields.c); // помилка: нестатичне поле | |
| // виклик статичного методу | |
| System.out.println("\nвиклик статичного методу:"); | |
| StaticFields.staticMeth(); | |
| // створення об'єкта для доступу до нестатичних членів | |
| System.out.println("\nстворення об'єкта StaticFields:"); | |
| StaticFields sf = new StaticFields(); | |
| // доступ до полів через об'єкт | |
| System.out.println("\nдоступ до полів через об'єкт:"); | |
| System.out.println("sf.a = " + sf.a); // не рекомендується, але працює | |
| System.out.println("sf.b = " + sf.b); // не рекомендується, але працює | |
| System.out.println("sf.c = " + sf.c); | |
| // виклик методів через об'єкт | |
| System.out.println("\nвиклик методів через об'єкт:"); | |
| sf.staticMeth(); // не рекомендується, але працює | |
| sf.commonMeth(); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment