Объект Class является своего рода мета-объектом, описывающим класс объекта. Он используется в основном с возможностями отражения Java. Вы можете думать об этом как о «чертеже» реального класса. Например. У вас есть автомобиль класса, как это:
public class Car {
public String brand;
}
Затем вы можете построить объект Class, который описывает ваш класс "Car".
Class myCarClass = Class.forName("Car");
Теперь вы можете выполнять любые запросы к классу Car для этого объекта Class:
myCarClass.getName() - returns "Car"
myCarClass.getDeclaredField("brand") - returns a Field object describing the "brand" field
и так далее. Каждый объект Java имеет метод getClass (), который возвращает объект Class, описывающий класс объекта Java. Так что вы можете сделать что-то вроде:
Car myCar = new Car();
Class myCarClass = myCar.getClass();
Это также работает для объектов, которые вы не знаете, например, объекты, которые вы получаете извне:
public void tellMeWhatThisObjectsClassIs(Object obj) {
System.out.println(obj.getClass().getName());
}
Вы можете передать этому методу любой объект Java, и он напечатает фактический класс объекта, который вы ему дали.
При работе с Java большую часть времени вам не нужно беспокоиться об объектах Class. У них есть несколько удобных вариантов использования. Например. они позволяют программно создавать объекты определенного класса, который часто используется для сериализации и десериализации объектов (например, преобразование объектов Java назад и вперед в / из XML или JSON).
Class myCarClass = Class.forName("Car");
Car myCar = myCarClass.newInstance(); // is roughly equivalent to = new Car();
Вы также можете использовать его, чтобы узнать все объявленные поля или методы вашего класса и т. Д., Что очень полезно в некоторых случаях. Так, например если ваш метод получает неизвестный объект, и вам нужно больше о нем знать, например, если он реализует некоторый интерфейс и т. д., класс Class здесь ваш друг.
Короче говоря, классы Class, Field, Method и т. Д., Которые находятся в пакете java.lang.reflect, позволяют анализировать определенные вами классы, методы, поля, создавать их новые экземпляры, вызывать методы всех видов. других вещей, и они позволяют вам делать это динамически во время выполнения.