
Лекции Java / 09. Механизмы рефлексии. Нововведения Java5.pptx
.pdf
Самарский государственный аэрокосмический университет имени академика С.П. Королёва
Лекция 9.1
Механизмы рефлексии
© Составление, Гаврилов А.В., 2013
Самара
2013

План лекции
nРефлексия и её возможности
nУчастники механизма рефлексии
nПолучение и работа со ссылкой на описание класса
nВызов конструкторов и методов
nУправление загрузкой классов
Самарский государственный аэрокосмический университет имени академика С.П. Королёва |
2 |

Понятие рефлексии
nРефлексия (от лат. reflexio – обращение назад) – обращение субъекта на себя самого, на свое знание или на свое собственное состояние
nРефлексия в Java – возможность программы анализировать саму себя, взаимодействуя с виртуальной машиной
Java (JVM)
Самарский государственный аэрокосмический университет имени академика С.П. Королёва |
3 |

Возможности механизма рефлексии
nЗагрузка типов во время исполнения программы
nИсследование структуры типов и их элементов
nСоздание экземпляров классов
nВызов методов
nЗагрузка классов из набора байтов
Самарский государственный аэрокосмический университет имени академика С.П. Королёва |
4 |

Участники механизма рефлексии
n Класс java.lang.Class
•Класс является метаклассом по отношению к другим типам
•Экземпляры класса Class описывают классы и интерфейсы выполняемого приложения
•Методы класса Class позволяют исследовать содержимое описываемого класса и его свойства
n Класс java.lang.ClassLoader
• Реализует механизмы загрузки классов
Самарский государственный аэрокосмический университет имени академика С.П. Королёва |
5 |

Участники механизма рефлексии
n Пакет java.lang.reflect
•Содержит ряд дополнительных и вспомогательных классов
•Field
Описывает поле объекта
• Method
Описывает метод объекта
• Constructor
Описывает конструктор объекта
• Modifier
Инкапсулирует работу с модификаторами
• Array
Инкапсулирует работу с массивами
Самарский государственный аэрокосмический университет имени академика С.П. Королёва |
6 |

Получение представления класса
nМетод Class Object.getClass()
Возвращает ссылку на представление класса, экземпляром которого является объект
nПсевдополе Object.class
Ссылка на представление указанного класса
nМетод static Class Class.forName(...)
Возвращает ссылку на представление класса, полное имя которого указывается параметром типа String
Самарский государственный аэрокосмический университет имени академика С.П. Королёва |
7 |

Получение представления класса
nМетод Class[] Class.getClasses()
Возвращает ссылку на массив ссылок на объекты Class вложенных типов
nМетод Class Class.getDeclaringClass()
Для вложенных типов возвращает ссылку на объект Class внешнего типа
nМетод Class[] Class.getInterfaces()
Возвращает ссылки на описания интерфейсов, от которых наследует тип
nМетод Class Class.getSuperclass()
Возвращает ссылку на описание родительского класса
Самарский государственный аэрокосмический университет имени академика С.П. Королёва |
8 |

Пример получения информации о классе
import java.lang.reflect.*;
class ListMethods {
public static void main(String[] argv) throws ClassNotFoundException {
Class c = Class.forName(argv[0]); Constructor[] cons = c.getConstructors( ); printList("Constructors", cons);
Method[] meths = c.getMethods( ); printList("Methods", meths); Field[] fields = c.getFields(); printList("Fields", fields);
}
static void printList(String s, Object[] o) { System.out.println("*** " + s + " ***");
for (int i = 0; i < o.length; i++) System.out.println(o[i].toString( ));
}
}
Самарский государственный аэрокосмический университет имени академика С.П. Королёва |
9 |

Возможности класса Class
nЗагрузка класса в JVM по его имени static Class forName(String name)
nОпределение вида типа boolean isInterface() boolean isLocalClass()
nПолучение родительских типов
Class getSuperclass() Class[] getInterfaces()
nПолучение вложенных типов
Class[] getClasses()
nСоздание объекта
Object newInstance()
Самарский государственный аэрокосмический университет имени академика С.П. Королёва |
10 |