No se escribe nada Class
. Cada Object
en Java pertenece a un cierto class
. Es por eso que la Object
clase, que es heredada por todas las demás clases, define el getClass()
método.
getClass()
, o el literal de clase: Foo.class
devuelve un Class
objeto, que contiene algunos metadatos sobre la clase:
- nombre
- paquete
- métodos
- campos
- constructores
- anotaciones
y algunos métodos útiles como fundición y diversos controles ( isAbstract()
, isPrimitive()
, etc). el javadoc muestra exactamente qué información puede obtener sobre una clase.
Entonces, por ejemplo, si a un método suyo se le da un objeto y desea procesarlo en caso de que esté anotado con la @Processable
anotación, entonces:
public void process(Object obj) {
if (obj.getClass().isAnnotationPresent(Processable.class)) {
}
}
En este ejemplo, obtiene los metadatos sobre la clase del objeto dado (cualquiera que sea) y comprueba si tiene una anotación determinada. Muchos de los métodos en una Class
instancia se denominan "operaciones reflexivas" o simplemente "reflexión. Lea aquí sobre la reflexión, por qué y cuándo se usa".
Tenga en cuenta también que el Class
objeto representa enumeraciones e interfaces junto con clases en una aplicación Java en ejecución y tiene los metadatos respectivos.
Para resumir, cada objeto en java tiene (pertenece a) una clase y tiene un Class
objeto respectivo , que contiene metadatos sobre él, que es accesible en tiempo de ejecución.
Class
clase hereda deObject
sí misma.Class.class
devuelve unClass
objeto que representa laClass
clase. Puedes reflexionar sobre la reflexión. MI CABEZA ASPLODE.Un objeto Class es una especie de metaobjeto que describe la clase de un objeto. Se utiliza principalmente con las capacidades de reflexión de Java. Puede pensar en ello como un "modelo" de la clase real. Por ejemplo, tienes un coche de clase como este:
public class Car { public String brand; }
Luego puede construir un objeto Class que describa su clase "Car".
Class myCarClass = Class.forName("Car");
Ahora puede hacer todo tipo de consultas en su clase Car en ese objeto Class:
myCarClass.getName() - returns "Car" myCarClass.getDeclaredField("brand") - returns a Field object describing the "brand" field
y así. Cada objeto java tiene un método getClass () que devuelve el objeto Class que describe la clase del objeto Java. Entonces podrías hacer algo como:
Car myCar = new Car(); Class myCarClass = myCar.getClass();
Esto también funciona para objetos que no conoce, por ejemplo, objetos que obtiene del exterior:
public void tellMeWhatThisObjectsClassIs(Object obj) { System.out.println(obj.getClass().getName()); }
Puede alimentar este método con cualquier objeto java e imprimirá la clase real del objeto que le ha dado.
Cuando trabaja con Java, la mayoría de las veces no necesita preocuparse por los objetos Class. Sin embargo, tienen algunos casos prácticos de uso. Por ejemplo, le permiten instanciar mediante programación objetos de una determinada clase, que se utiliza a menudo para la serialización y deserialización de objetos (por ejemplo, conversión de objetos Java hacia / desde XML o JSON).
Class myCarClass = Class.forName("Car"); Car myCar = myCarClass.newInstance(); // is roughly equivalent to = new Car();
También puede usarlo para averiguar todos los campos o métodos declarados de su clase, etc., lo cual es muy útil en ciertos casos. Entonces, por ejemplo, si su método recibe un objeto desconocido y necesita saber más sobre él, como si implementa alguna interfaz, etc., la clase Class es su amiga aquí.
En pocas palabras, las clases Class, Field, Method, etc.que están en el paquete java.lang.reflect le permiten analizar sus clases, métodos, campos definidos, crear nuevas instancias de ellos, llamar a métodos todo tipo de otras cosas y te permiten hacer esto dinámicamente en tiempo de ejecución.
fuente
getClass()
es un método que devuelve un objeto que es una instancia dejava.lang.Class
... no hay conversión involucrada. El casting se vería así:fuente
También me gustaría agregar a la respuesta de ColinD que getClass devolverá el mismo objeto para instancias del mismo tipo. Esto imprimirá verdadero :
MyOtherClass foo = new MyOtherClass(); MyOtherClass bar = new MyOtherClass(); System.out.println(foo.getClass()==bar.getClass());
Tenga en cuenta que no lo es
equals
, lo estoy usando==
.fuente
Un objeto Class es una instancia de Class (java.lang.Class). A continuación, la cita tomada de javadoc de la clase debería responder a su pregunta
fuente
Para comprender completamente el objeto de clase, regresemos y comprendamos que obtenemos el objeto de clase en primer lugar. Verá, cada
.java
archivo que crea, cuando compila ese.java
archivo, el jvm creará un.class
archivo, este archivo contiene toda la información sobre la clase, a saber:La lista que ve arriba es la que normalmente ve en una clase típica. Ahora, hasta este punto, su
.java
archivo y.class
archivo existe en su disco duro, cuando realmente necesita usar la clase, es decir, ejecutar el código en elmain()
método, el jvm usará ese.class
archivo en su disco duro y lo cargará en una de las 5 memorias areas en jvm, que es el área de método, inmediatamente después de cargar el.class
archivo en el área de método, jvm usará esa información y un objeto Class que representa esa clase que existe en el área de memoria del montón.Aquí está la vista de nivel superior,
.java
--compilar ->.class
-> cuando ejecuta su script ->.class
carga en el área de método --jvm crea un objeto de clase desde el área de método -> nace un objeto de claseCon un objeto de clase, obtienes información como el nombre de la clase y los nombres de los métodos, todo sobre la clase.
Además, debe tener en cuenta que solo habrá un objeto de clase para cada clase que use en el script.
Espero que esto tenga sentido
fuente
La clase Object es la clase principal de todas las clases en Java de forma predeterminada. En otras palabras, es la clase más alta de java.
La clase Object es beneficiosa si desea hacer referencia a cualquier objeto cuyo tipo no conoce. Observe que la variable de referencia de la clase principal puede hacer referencia al objeto de la clase secundaria, conocido como upcasting.
Tomemos un ejemplo, hay un método getObject () que devuelve un objeto, pero puede ser de cualquier tipo, como Empleado, Estudiante, etc., podemos usar la referencia de clase Objeto para referir ese objeto. Por ejemplo:
Object obj=getObject()
; // no sabemos qué objeto será devuelto por este métodofuente