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

"Hei, Amigo!"

"Nå er det tid for hovedarrangementet. Vi blir kjent med klasseklassen og berører Refleksjon.
Som du sikkert allerede har skjønt, er alt i Java et objekt. Og hva trenger et objekt? Hva har hvert objekt som definerer hva handler det om?"

"En klasse!"

"Riktig! Godt gjort. Hvert objekt har en klasse. Men å komme tilbake til objekter... Noen objekter inneholder fullstendig en enhet, mens andre bare hjelper til med å administrere den."

"Denne sistnevnte typen inkluderer FileOutputStream og Thread . Når du oppretter et Thread- objekt, blir det ikke opprettet en ny tråd. Tråden opprettes av den virtuelle Java-maskinen etter at start()-metoden kalles. Dette objektet hjelper ganske enkelt med å administrere prosessen."

"Samme med FileOutputStream : filen er lagret på disk, og operativsystemet administrerer lagring og tilgang. Men vi kan samhandle med den gjennom filobjekter, nok en gang ved hjelp av den virtuelle Java-maskinen."

— Ja, det forstår jeg allerede.

"Så, det er en spesiell klasse som heter Class for interaksjon med klasser."

"Det var ikke vanskelig å gjette."

"Jepp. Hver gang den virtuelle Java-maskinen laster en ny klasse inn i minnet, lager den et klasseobjekt, som du kan bruke til å få spesifikk informasjon om den innlastede klassen."

"Hver klasse og objekt er assosiert med 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! Så interessant!"

"Husker du at ordklassen er et nøkkelord i Java og ikke kan brukes som et variabelnavn?"

"Å ja, jeg vet, jeg vet. Jeg har bare glemt det."

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

"Ja, vi brukte det da vi skrev vår egen implementering av likhetsmetoden."

"Ja, du kan bruke getClass()-metoden for å teste om objekter har samme klasse."

"Og hva kan du gjøre med denne gjenstanden?"

"Vel, 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å kult som jeg trodde."

"Vil du at det skal være kult? Det er også ReflectionReflection er superkult."

"Hva er refleksjon ?"

" Refleksjon er en klasses evne til å skaffe informasjon om seg selv. Java har spesielle klasser:  Field and Method , som ligner på klasseklassen for klasser. Akkurat som klasseobjekter lar deg få informasjon om en klasse, gir feltobjekter informasjon om et felt , og Method-objektet gir informasjon om en metode. Og se på hva du kan gjøre med dem:"

Java-kode Beskrivelse
Class[] interfaces = List.class.getInterfaces();
Henter en liste over klasseobjekter for Listeklassens grensesnitt
Class parent = String.class.getSuperclass();
Henter Class-objektet til String-klassens overordnede klasse
Method[] methods = List.class.getMethods();
Får en liste over List-klassens metoder
String s = String.class.newInstance();
Oppretter en ny streng
String s = String.class.newInstance();
Method m = String.class.getMethod("length");
int length = (int) m.invoke(s)
Henter String-klassens lengdemetode og kaller den på String s

"Wow! Nå er det veldig kult!"