package gotowe.p02_zmienne;

//NK int globalna;

public class B_RodzajeZmiennych {
    // zmienna statyczna - istnieje jeden egzemplarz w pamięci
    static int statyczna = 10;

    // zmienna instancyjna (inaczej: pole, atrybut) należy do obiektu
    // Każdy obiekt tej klasy, w której jesteśmy, będzie posiadał taką zmienną
    int instancyjna = 20;

    public static void main(String[] args) {
        // zmienna lokalna, czyli deklarowana w obrębie metody
        int lokalna = 30;

        metodaStatyczna(40);

        // metody instancyjnej nie da się wywołać w kontekście statycznym (np. w main)
        // metodaInstancyjna(50);

        // Trzeba utworzyć obiekt i wywołać tę metodę na obiekcie.
        // Tworzę obiekt, czyli "instancję"
        B_RodzajeZmiennych obiekt = new B_RodzajeZmiennych();
        obiekt.metodaInstancyjna(50);

        System.out.println(statyczna);
        System.out.println(B_RodzajeZmiennych.statyczna);
        System.out.println(obiekt.instancyjna);

        B_RodzajeZmiennych innyObiekt = new B_RodzajeZmiennych();
        innyObiekt.instancyjna = 123;
        innyObiekt.metodaInstancyjna(33);
    }

    static void metodaStatyczna(int parametr) {
        int lokalna = 60;

        System.out.println("metodaStatyczna:");
        System.out.println("statyczna: " + statyczna);
        // m "kontekście statycznym", czyli w metodzie statycznej nie ma dostępu do zmiennych instancyjnych,
        // bo "nie wiemy w jakim obiekcie"
        //NK System.out.println("instancyjna: " + instancyjna);
        System.out.println("lokalna: " + lokalna);
        System.out.println("parametr: " + parametr);
        System.out.println();
    }

    void metodaInstancyjna(int parametr) {
        int lokalna = 70;

        System.out.println("metodaInstancyjna:");
        System.out.println("statyczna: " + statyczna);
        System.out.println("instancyjna: " + instancyjna);
        System.out.println("lokalna: " + lokalna);
        System.out.println("parametr: " + parametr);
        System.out.println();
    }

}
