2012-01-12 13 views
20

Cualquier clase en el java tiene una .class, quiero saber .class es un método estático o no? O es un campo público estático?¿Es .class un método o campo?

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

getClass() He leído y volver a leer su pregunta tres veces, y me temo que no puedo hacer ningún sentido de eso – NPE

+2

@aix: en Java, todas las clases (por ejemplo, 'String') tienen un * [literal de clase] (http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#250782) * ('.class') que es la instancia [' Class'] (http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html) para esa clase. Por ejemplo, 'String.class == Class.forName (" java.lang.String ")' (excluyendo casos de borde alrededor de classloaders y tal). –

+1

@ T.J.Crowder: Oh. Pensé que estaba hablando de los archivos de clase * :-) – NPE

Respuesta

30

Su ninguna.
Es una función de lenguaje integrado (un literal de clase) que se parece a un campo final público estático.

+4

Específicamente, una * literal de clase *: http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#250782 –

8

Cuando escribe .class después de un nombre de clase, hace referencia al objeto Class que representa la clase dada. .class se usa cuando no hay una instancia de la clase disponible.

Por ejemplo, si su clase es Print (se recomienda que el nombre de clase comience con una letra mayúscula), entonces Print.class es un objeto que representa la clase Imprimir en tiempo de ejecución. Es el mismo objeto que es devuelto por el método de cualquiera de instancia (directa) de Print.

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

instancia de una clase no es lo mismo que un objeto que representa el tipo de clase – Val

Cuestiones relacionadas