GetClass()-metoden, Class-objektet og en introduktion til Reflection - 1

"Hej, Amigo!"

"Nu er det tid til hovedbegivenheden. Vi stifter bekendtskab med klasseklassen og berører Reflection.
Som du sikkert allerede har indset, er alt i Java et objekt. Og hvad har et objekt brug for? Hvad har hvert objekt, der definerer hvad handler det om?"

"En klasse!"

"Godt! Godt klaret. Hvert objekt har en klasse. Men at komme tilbage til objekter... Nogle objekter indeholder fuldstændigt en entitet, mens andre simpelthen hjælper med at administrere den."

"Denne sidstnævnte type inkluderer FileOutputStream og Thread . Når du opretter et Thread- objekt, oprettes der ikke en ny tråd. Tråden oprettes af den virtuelle Java-maskine efter start()-metoden kaldes. Dette objekt hjælper simpelthen med at styre processen."

"Samme med FileOutputStream : filen er gemt på disken, og operativsystemet administrerer lagring og adgang. Men vi kan interagere med den gennem File-objekter, igen ved hjælp af den virtuelle Java-maskine."

"Ja, det forstår jeg allerede."

"Så der er en speciel klasse kaldet Klasse til at interagere med klasser."

"Det var ikke svært at gætte."

"Jep. Hver gang den virtuelle Java-maskine indlæser en ny klasse i hukommelsen, opretter den et klasseobjekt, som du kan bruge til at få specifik information om den indlæste klasse."

"Hver klasse og objekt er knyttet til et " Klasseobjekt ".

Eksempel Beskrivelse
Class clazz = Integer.class;
Henter Integer-klassens Class-objekt.
Class clazz = int.class;
Henter int-klassens Class-objekt.
Class clazz = "123".getClass();
Henter et strengobjekts klasseobjekt.
Class clazz = new Object().getClass();
Henter objektobjektets klasseobjekt.

"Wow! Hvor interessant!"

"Kan du huske, at ordklassen er et nøgleord i Java og ikke kan bruges som et variabelnavn?"

"Åh ja, jeg ved det, jeg ved det. Jeg har bare glemt det."

"Har du allerede brugt Class-objektet et sted?"

"Ja, vi brugte det, da vi skrev vores egen implementering af equals-metoden."

"Ja, du kan bruge metoden getClass() til at teste, om objekter har samme klasse."

"Og hvad kan du gøre med denne genstand?"

"Nå, mange ting:"

Java kode Beskrivelse
Class s = int.class;
String name = s.getName();
Får klassenavnet.
Class s = Class.forName("java.lang.String");
Får en klasse ved navn.
Object o1 = String.valueOf(1);
Object o2 = 123 + "T";
o1.getClass() == o2.getClass();
Sammenligner objekters klasser.

"Interessant, men ikke så fedt, som jeg troede."

"Du vil have, at det skal være fedt? Der er også ReflectionReflection er super cool."

"Hvad er Reflektion ?"

" Reflektion er en klasses evne til at indhente information om sig selv. Java har specielle klasser:  Field og Method , som ligner klasseklassen for klasser. Ligesom klasseobjekter lader dig få information om en klasse, giver Field-objekter information om et felt , og Method-objektet giver information om en metode. Og se på, hvad du kan gøre med dem:"

Java kode Beskrivelse
Class[] interfaces = List.class.getInterfaces();
Henter en liste over klasseobjekter til Listeklassens grænseflader
Class parent = String.class.getSuperclass();
Henter klasseobjektet for String-klassens overordnede klasse
Method[] methods = List.class.getMethods();
Får en liste over List-klassens metoder
String s = String.class.newInstance();
Opretter en ny streng
String s = String.class.newInstance();
Method m = String.class.getMethod("length");
int length = (int) m.invoke(s)
Henter String-klassens længdemetode og kalder den på String s

"Wow! Nu er det virkelig fedt!"