Идентификация типов во время выполнения (RTTI) — это очень полезный механизм в Java, который сохраняет информацию, связанную с классами, во время работы Java.
Полиморфизм реализован на основе RTTI. Функции RTTI в основном реализуются классом Class.
Класс класс
Класс-класс — это «класс классов» (класс классов). Если класс представляет собой абстракцию и набор объектов, то класс Class представляет собой абстракцию и набор классов.
Каждый объект Class представляет другой класс. Например, в следующей программе объект c1 класса Class представляет класс Human, а c2 представляет класс Woman.
Скопируйте код кода следующим образом:
тест публичного класса
{
public static void main(String[] args)
{
Человек aPerson = новый Человек();
Класс c1 = aPerson.getClass();
System.out.println(c1.getName());
Человек другойЧеловек = новая женщина();
Класс c2 = другойЧеловек.getClass();
System.out.println(c2.getName());
}
}
классЧеловеческий
{
/**
*аксессуар
*/
публичный int getHeight()
{
вернуть this.height;
}
/**
* мутатор
*/
public voidrowHeight(int h)
{
this.height = this.height + h;
}
частная высота int;
}
класс Женщина расширяет права человека
{
/**
* новый метод
*/
общедоступный человеческий метод GiveBirth()
{
System.out.println("Родить");
возврат (новый Человек());
}
}
Когда мы вызываем метод объекта getClass(), мы получаем ссылку на соответствующий объект класса.
В c2, даже если мы преобразуем ссылку объекта Women в ссылку объекта Human, объект Class, на который указывает объект, по-прежнему будет Woman.
Каждый объект в Java имеет соответствующий объект Class. Таким образом, мы можем в любой момент узнать, к какому классу «действительно» принадлежит объект, через объект Class. Независимо от того, какое преобразование типа мы выполняем по ссылке, объект Class, соответствующий самому объекту, остается тем же. Когда мы вызываем метод через ссылку, Java всегда может найти метод, определенный в правильном классе класса, и выполнить код в классе класса. Благодаря существованию объектов класса Java не потеряется из-за повышения типа. Это принцип полиморфизма.
getClass: Кто я?
Помимо метода getClass() у нас есть и другие способы вызова объектов класса Class.
Скопируйте код кода следующим образом:
тест публичного класса
{
public static void main(String[] args)
{
Класс c3 = Class.forName("Человек");
System.out.println(c1.getName());
Класс c4 = Женщина.класс
System.out.println(c2.getName());
}
}
Выше показано два способа:
1. Метод forName() получает в качестве параметра строку, которая является именем класса. Это вернет соответствующий объект класса.
2. Метод Woman.class напрямую вызывает член класса. Это вернет соответствующий объект класса.
Метод класса
Объект Class записывает информацию о соответствующем классе, такую как имя класса, пакет, в котором находится класс, и т. д. Мы можем вызвать соответствующий метод, например:
Скопируйте код кода следующим образом:
getName() возвращает имя класса
getPackage() возвращает пакет, в котором находится класс.
Вы можете использовать метод newInstance() объекта Class для создания объектов соответствующего класса, например:
Скопируйте код кода следующим образом:
Человек newPerson = c1.newInstance();
newInstance() вызывает метод сборки по умолчанию без параметров.
Мы можем получить члены определения класса:
Скопируйте код кода следующим образом:
getFields() возвращает все элементы общедоступных данных.
getMethods() возвращает все общедоступные методы
Классы анализа отражения можно использовать и дальше. Больше никаких подробностей здесь нет.
Дополнительные методы класса Class можно найти в официальной документации:
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Class.html
Загрузка класса класса
Когда Java создает объект определенного класса, например объект класса Human, Java проверяет, существует ли в памяти соответствующий объект класса.
Если в памяти нет соответствующего объекта Class, Java будет искать определение класса Human в файле .class и загружать объект Class класса Human.
После успешной загрузки объекта Class создание и связанные с ним операции других объектов Human будут ссылаться на объект Class.