Powiedzieliśmy już, że klasy to złożone typy danych. A teraz pomówmy trochę o drugiej stronie klas - przetwarzaniu klasy przez maszynę Java: w Javie wszystko jest obiektem, nawet klasa. Klasa jest obiektem . Ciekawy? Więc kontynuujmy.

Ładowanie klasy do pamięci

W rzeczywistości, kiedy klasa jest ładowana do pamięci, tworzone są trzy specjalne „obiekty”:

Ładowanie klasy do pamięci

Krótki opis obrazu

Żółty prostokąt:

Plik z kodem jest przechowywany na dysku jako plik z rozszerzeniem „.class”. Zawiera informacje o klasie, jej polach i metodach, a także kod metody skompilowany do kodu bajtowego.

Pomarańczowy prostokąt:

Kiedy maszyna Java ładuje klasę do pamięci, kompiluje jej kod bajtowy do kodu maszynowego na podstawie procesora komputera i systemu operacyjnego. Tylko maszyna Java ma dostęp do tego kodu maszynowego: my, jako programiści Java, nie mamy go.

Zielony prostokąt:

Maszyna Java tworzy obiekt, który zawiera wszystkie zmienne statyczne i metody klasy. Masz dostęp do tego „obiektu” po nazwie klasy.

Na przykład, kiedy piszesz , uzyskujesz dostęp do zmiennej statycznej , która znajduje się w pliku . To jest nasz zielony prostokąt. I to on ma w środku zmienną statyczną .java.lang.Math.PIPIjava.lang.Mathjava.lang.MathPI

Niebieski prostokąt:

Gdy maszyna Java ładuje kod klasy do pamięci, tworzy specjalny obiekt typu java.lang.Class, który przechowuje informacje o załadowanej klasie: jej nazwę, nazwy metod, nazwy i typy pól itd.

Nazwa „Klasa” może być nieco myląca. Bardziej logiczne byłoby nazwanie jej ClassInfo: ta klasa przechowuje tylko pewne informacje o załadowanej klasie.

Możesz uzyskać obiekt klasy z dowolnego typu za pomocą polecenia view:

Class Nazwa = NazwaКласса.class;

Przykłady:

Kod Notatka
Class a = String.class;
Pobierz obiekt typu Classz informacjami o klasieString
Class b = Object.class;
Pobierz obiekt typu Classz informacjami o klasieObject
Class c = Integer.class;
Pobierz obiekt typu Classz informacjami o klasieInteger
Class d = int.class;
Pobierz obiekt typu Classz informacjami o typieint
Class e = void.class;
Pobierz obiekt typu Classz informacjami o typievoid

Odwołanie do obiektu z opisem klasy można również uzyskać z obiektu: w tym celu każdy obiekt ma metodę getClass()odziedziczoną po klasie Object.

Przykłady:

Kod Notatka
Class a = "Cześć".getClass();
Ten sam obiekt coString.class
Class b = new Integer().getClass();
Ten sam obiekt coInteger.class
Class c = Boolean.TRUE.getClass();
Ten sam obiekt coBoolean.class