2012-01-12 11 views
20

Qualsiasi classe in Java ha una classe. Voglio sapere. Class è un metodo statico o no? O è un campo statico pubblico?È .class un metodo o un campo?

boolean alwaysTrue = (String.class == Class.forName("java.lang.String")); 
+9

getClass() Ho letto e ri-letto la tua domanda tre volte, e temo che non posso fare alcun senso di esso. – NPE

+2

@aix: in Java, tutte le classi (ad es. 'String') hanno un * [valore letterale] (http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#250782) * ('.class') che è l'istanza [' Class'] (http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html) per quella classe. Ad esempio, 'String.class == Class.forName (" java.lang.String ")' (tranne i casi limite relativi ai classloader e simili). –

+1

@ T.J.Crowder: Oh. Ho pensato che stesse parlando di file * di classe * :-) – NPE

risposta

30

Il suo n.
È una funzionalità di linguaggio incorporata (un letterale di classe) che assomiglia ad un campo finale statico pubblico.

+4

In particolare, un * letterale di classe *: http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#250782 –

8

Quando si scrive .class dopo il nome di una classe, fa riferimento all'oggetto Class che rappresenta la classe data. .class viene utilizzato quando non è disponibile un'istanza della classe.

Ad esempio, se la classe è Print (è consigliabile che il nome della classe inizi con una lettera maiuscola), quindi Print.class è un oggetto che rappresenta la classe Stampa su runtime. E 'lo stesso oggetto che viene restituito dal metodo di qualsiasi istanza (diretta) di Print.

Print myPrint = new Print(); 
System.out.println(Print.class.getName()); 
System.out.println(myPrint.getClass().getName()); 
+1

l'istanza di una classe non è uguale a un oggetto che rappresenta il tipo di classe – Val

Problemi correlati