Nic nie jest pisane na maszynie Class
. Każdy Object
w Javie należy do pewnego class
. Dlatego Object
klasa, która jest dziedziczona przez wszystkie inne klasy, definiuje getClass()
metodę.
getClass()
lub literał klasy - Foo.class
zwraca Class
obiekt, który zawiera metadane dotyczące klasy:
- Nazwa
- pakiet
- metody
- pola
- konstruktorzy
- adnotacje
i Użyteczne sposoby, takie jak odlewanie i różne kontroli ( isAbstract()
, isPrimitive()
itp). javadoc pokazuje dokładnie, jakie informacje o klasie można uzyskać.
Na przykład, jeśli twoja metoda otrzyma obiekt i chcesz go przetworzyć na wypadek, gdyby została opatrzona @Processable
adnotacją, to:
public void process(Object obj) {
if (obj.getClass().isAnnotationPresent(Processable.class)) {
}
}
W tym przykładzie uzyskujesz metadane dotyczące klasy danego obiektu (cokolwiek to jest) i sprawdzasz, czy ma on daną adnotację. Wiele metod na Class
instancji nazywa się „operacjami refleksyjnymi” lub po prostu „refleksją. Przeczytaj tutaj o refleksji, dlaczego i kiedy jest używana.
Należy również zauważyć, że Class
obiekt reprezentuje wyliczenia i interfejsy wraz z klasami w uruchomionej aplikacji Java i ma odpowiednie metadane.
Podsumowując - każdy obiekt w java ma (należy do) klasę i ma odpowiedni Class
obiekt, który zawiera o nim metadane, który jest dostępny w czasie wykonywania.
Class
Klasa dziedziczy poObject
sobie.Class.class
zwracaClass
obiekt, który reprezentujeClass
klasę. Możesz zastanowić się nad refleksją. MY HEAD ASPLODE.Obiekt Class jest rodzajem meta obiektu opisującego klasę obiektu. Jest używany głównie z możliwościami odbicia w Javie. Możesz myśleć o tym jak o „planie” aktualnej klasy. Np. Masz taki samochód klasy:
public class Car { public String brand; }
Następnie możesz skonstruować obiekt Class, który opisuje Twoją klasę „Car”.
Class myCarClass = Class.forName("Car");
Teraz możesz wykonywać różnego rodzaju zapytania dotyczące klasy samochodu w tym obiekcie klasy:
myCarClass.getName() - returns "Car" myCarClass.getDeclaredField("brand") - returns a Field object describing the "brand" field
i tak dalej. Każdy obiekt Java ma metodę getClass (), która zwraca obiekt Class opisujący klasę obiektu Java. Możesz więc zrobić coś takiego:
Car myCar = new Car(); Class myCarClass = myCar.getClass();
Działa to również w przypadku obiektów, których nie znasz, np. Obiektów, które dostałeś z zewnątrz:
public void tellMeWhatThisObjectsClassIs(Object obj) { System.out.println(obj.getClass().getName()); }
Możesz przesłać tę metodę do dowolnego obiektu Java, a wydrukuje ona aktualną klasę obiektu, który jej przekazałeś.
Podczas pracy z Javą w większości przypadków nie musisz martwić się o obiekty Class. Mają jednak kilka przydatnych przypadków użycia. Np. Pozwalają na programistyczne instancjowanie obiektów określonej klasy, która jest często używana do serializacji i deserializacji obiektów (np. Konwertowanie obiektów Java w obie strony do / z XML lub JSON).
Class myCarClass = Class.forName("Car"); Car myCar = myCarClass.newInstance(); // is roughly equivalent to = new Car();
Możesz go również użyć do znalezienia wszystkich zadeklarowanych pól lub metod swojej klasy itp., Co jest bardzo przydatne w niektórych przypadkach. Na przykład, jeśli twoja metoda otrzyma nieznany obiekt i musisz wiedzieć o nim więcej, na przykład jeśli zawiera jakiś interfejs itp., Klasa Class jest tutaj twoim przyjacielem.
Krótko mówiąc, klasy Class, Field, Method itp., Które znajdują się w pakiecie java.lang.reflect, pozwalają analizować zdefiniowane przez Ciebie klasy, metody, pola, tworzyć nowe ich instancje, wywoływać metody wszelkiego rodzaju innych rzeczy i pozwalają ci to robić dynamicznie w czasie wykonywania.
źródło
getClass()
jest metodą, która zwraca obiekt, który jest instancjąjava.lang.Class
... bez rzutowania. Casting wyglądałby tak:źródło
Chciałbym również dodać do odpowiedzi ColinD, że getClass zwróci ten sam obiekt dla instancji tego samego typu. To wydrukuje prawda :
MyOtherClass foo = new MyOtherClass(); MyOtherClass bar = new MyOtherClass(); System.out.println(foo.getClass()==bar.getClass());
Zauważ, że tak nie jest
equals
, używam==
.źródło
Obiekt Class jest instancją klasy Class (java.lang.Class). Poniższy cytat zaczerpnięty z javadoc klasy powinien odpowiedzieć na Twoje pytanie
źródło
Aby w pełni zrozumieć obiekt klasy, cofnijmy się i zrozummy, że w pierwszej kolejności otrzymujemy obiekt klasy. Widzisz, każdy
.java
utworzony plik, kiedy kompilujesz ten.java
plik, jvm utworzy.class
plik, ten plik zawiera wszystkie informacje o klasie, a mianowicie:Lista, którą widzisz powyżej, jest tym, co zazwyczaj widzisz na typowych zajęciach. Teraz, do tego momentu, twój
.java
plik i.class
plik istnieje na twoim twardym dysku, kiedy faktycznie potrzebujesz użyć klasy, tj. Wykonać kod wmain()
metodzie, jvm użyje tego.class
pliku na twoim twardym dysku i załaduje go do jednej z 5 pamięci obszary w jvm, który jest obszarem metody, natychmiast po załadowaniu.class
pliku do obszaru metody jvm użyje tych informacji i obiektu Class, który reprezentuje tę klasę, która istnieje w obszarze pamięci sterty.Oto widok najwyższego poziomu,
.java
--compile ->.class
-> kiedy wykonujesz skrypt ->.class
ładuje do obszaru metody - jvm tworzy obiekt klasy z obszaru metody -> rodzi się obiekt klasyZa pomocą obiektu klasy uzyskujesz informacje, takie jak nazwa klasy i nazwy metod, wszystko o klasie.
Należy również pamiętać, że dla każdej klasy używanej w skrypcie będzie tylko jeden obiekt klasy.
Mam nadzieję, że to ma sens
źródło
Klasa Object jest domyślnie klasą nadrzędną wszystkich klas w Javie. Innymi słowy, jest to najwyższa klasa java.
Klasa Object jest korzystna, jeśli chcesz odwołać się do dowolnego obiektu, którego typu nie znasz. Zauważ, że zmienna referencyjna klasy nadrzędnej może odnosić się do obiektu klasy potomnej, znanej jako upcasting.
Weźmy przykład, istnieje metoda getObject (), która zwraca obiekt, ale może być dowolnego typu, np. Employee, Student itp., Możemy użyć odwołania do klasy Object, aby odnieść się do tego obiektu. Na przykład:
Object obj=getObject()
; // nie wiemy, jaki obiekt zostanie zwrócony z tej metodyźródło