Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции Java / 09. Механизмы рефлексии. Нововведения Java5.pptx

.pdf
Скачиваний:
144
Добавлен:
16.03.2015
Размер:
223.45 Кб
Скачать

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

Лекция 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