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”:
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.PI
PI
java.lang.Math
java.lang.Math
PI
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 |
---|---|
|
Pobierz obiekt typu Class z informacjami o klasieString |
|
Pobierz obiekt typu Class z informacjami o klasieObject |
|
Pobierz obiekt typu Class z informacjami o klasieInteger |
|
Pobierz obiekt typu Class z informacjami o typieint |
|
Pobierz obiekt typu Class z 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 |
---|---|
|
Ten sam obiekt coString.class |
|
Ten sam obiekt coInteger.class |
|
Ten sam obiekt coBoolean.class |
GO TO FULL VERSION