Sobes.tech
Junior

Co znamená klíčové slovo 'static' v Javě?

sobes.tech AI

Odpověď od AI

static v Javě se používá k deklaraci prvků, které patří ke třídě, nikoliv k konkrétnímu výřezu objektu.

Klíčové slovo může být použito na:

  • Proměnné (pole):
    • Kopie proměnné existuje pro celou třídu, bez ohledu na počet vytvořených výtisků.
    • K přístupu lze použít název třídy (například ClassName.staticVariable).
    // Příklad statické proměnné
    public class MyMath {
        public static final double PI = 3.14159;
        // Přístup: MyMath.PI
    }
    
  • Metody:
    • Metoda patří třídě, nikoliv konkrétnímu objektu.
    • Může být volána přes název třídy (například ClassName.staticMethod()).
    • Nemá přístup k nestatickým členům třídy (proměnné nebo metody), protože jsou spojeny s instancí.
    // Příklad statické metody
    public class Calculator {
        public static int add(int a, int b) {
            return a + b;
        }
        // Volání: Calculator.add(5, 3)
    }
    
  • Iniciační bloky:
    • Spouští se jednou při načtení třídy do JVM.
    • Používá se k inicializaci statických polí nebo k provádění jiných akcí souvisejících s třídou.
    // Příklad statického bloku
    public class DataInitializer {
        static {
            // Kód, který se provádí při načtení třídy
            System.out.println("DataInitializer třída načtena.");
        }
    }
    
  • Vnořené třídy (inner/nested classes):
    • Statická vnořená třída se chová jako běžná třída vyšší úrovně, s výjimkou toho, že je uvnitř jiné třídy.
    • Nevyžaduje vytvoření instance vnější třídy pro přístup k ní.
    • Má přístup pouze ke statickým členům vnější třídy.
    // Příklad statické vnořené třídy
    public class OuterClass {
        static class StaticInnerClass {
            // Pole a metody statické vnořené třídy
        }
    }
    // Přístup: OuterClass.StaticInnerClass inner = new OuterClass.StaticInnerClass();
    

Použití static pomáhá při vytváření užitečných tříd, ukládání sdílených dat a správě stavu na úrovni třídy.