Содержание

Слайд 2

Java Advanced / Collections Framework

Содержание

Введение
Структура класса
Массивы
Загрузчики классов
Параметры типов
Proxy
Заключение

Java Advanced / Collections Framework Содержание Введение Структура класса Массивы Загрузчики классов Параметры типов Proxy Заключение

Слайд 3

Java Advanced / Collections Framework

Reflection

Библиотека, позволяющая оперировать информацией о типах во

время выполнения
Пакеты
java.lang
java.lang.reflect
Java Advanced / Collections Framework Reflection Библиотека, позволяющая оперировать информацией

Слайд 4

Введение

Часть 1

Введение Часть 1

Слайд 5

Java Advanced / Collections Framework

Информация о типе

Класс Class -- информация о

типе
Предоставляемая информация
Структура класса
Структура наследования
Проверки времени выполнения

Java Advanced / Collections Framework Информация о типе Класс Class

Слайд 6

Java Advanced / Collections Framework

Получение информации о типе

Во время исполнения
object.getClass()
Во

время компиляции
type.class
Предопределенные
Wrapper.TYPE
Java Advanced / Collections Framework Получение информации о типе Во

Слайд 7

Java Advanced / Collections Framework

Типы типов

Для определения типов служат методы вида
is*()

Java Advanced / Collections Framework Типы типов Для определения типов служат методы вида is*()

Слайд 8

Java Advanced / Collections Framework

Общая информация о классе

Имя класса
getCanonicalName() – каноническое

имя
getName() – полное имя
getSimpleName() – простое имя
Структура классов
getSuperClass() – предок
getInterfaces() – реализуемые интерфейсы
Модификаторы
getModifiers() – модификаторы
Java Advanced / Collections Framework Общая информация о классе Имя

Слайд 9

Java Advanced / Collections Framework

Место определения класса

Методы получения места, в котором

определен класс
Java Advanced / Collections Framework Место определения класса Методы получения места, в котором определен класс

Слайд 10

Java Advanced / Collections Framework

Приведение типов

Определение возможности приведения
isAssignableFrom(class) – класса
isInstance(object)

– объекта
Приведение
cast(object) – привести ссылку к типу
Java Advanced / Collections Framework Приведение типов Определение возможности приведения

Слайд 11

Структура класса

Часть 2

Структура класса Часть 2

Слайд 12

Java Advanced / Collections Framework

Информация о члене класса

Интерфейс Member
Методы
getDeclaringClass() – класс,

в котором определен
getName() – имя члена
getModifiers() – модификаторы
Java Advanced / Collections Framework Информация о члене класса Интерфейс

Слайд 13

Java Advanced / Collections Framework

Модификаторы

Класс Modifiers

Java Advanced / Collections Framework Модификаторы Класс Modifiers

Слайд 14

Java Advanced / Collections Framework

Поля

Открытые
getFields() – все поля
getField(name) – конкретное поле
Все
getDeclaredFields()

– все поля
getDeclaredField(name) – конкретное поле
Исключения
NoSuchFieldException
Java Advanced / Collections Framework Поля Открытые getFields() – все

Слайд 15

Java Advanced / Collections Framework

Свойства полей

Класс Field
Информация
getName() – имя поля
getType() –

тип значения
Чтение значения
get(object) – ссылки
get*(object) – значения примитивного типа
Запись значения
set(object, value) – ссылки
set*(object, value) – значения примитивного типа
Java Advanced / Collections Framework Свойства полей Класс Field Информация

Слайд 16

Java Advanced / Collections Framework

Методы

Открытые
getMethods() – все методы
getMethod(name, Class… parameters) –

конкретный метод
Все
getDeclaredMethods() – все методы
getDeclaredMethod(name , Class… parameters) – конкретный метод
Исключения
NoSuchMethodException
Java Advanced / Collections Framework Методы Открытые getMethods() – все

Слайд 17

Java Advanced / Collections Framework

Свойства методов

Класс Method
Сигнатура метода
getName() – имя метода
getParameterTypes()

– параметры метода
Другая информация
getExceptionTypes() – возможные исключения
getReturnType() – тип возвращаемого значения
Вызов метода
invoke(Object object, Object …args) – вызвать метод с указанными аргументами
Java Advanced / Collections Framework Свойства методов Класс Method Сигнатура

Слайд 18

Java Advanced / Collections Framework

Конструкторы

Открытые
getConstructors() – все конструкторы
getConstructor(Class… parameters) – конкретный

конструктор
Все
getDeclaredConstructors() – все конструкторы
getDeclaredConstructor(Class… parameters) – конкретный конструктор
Исключения
NoSuchMethodException
Java Advanced / Collections Framework Конструкторы Открытые getConstructors() – все

Слайд 19

Java Advanced / Collections Framework

Свойства конструкторов

Класс Constructor
Информация о конструкторе
getParameterTypes() – параметры

конструктора
getExceptionTypes() – возможные исключения
Создание объекта
newInstance(Object … args) – создать новый объект
class.newInstance() – создать новый объект используя конструктор по умолчанию
Java Advanced / Collections Framework Свойства конструкторов Класс Constructor Информация

Слайд 20

Java Advanced / Collections Framework

Классы и интерфейсы

Открытые
getClasses() – все классы и

интерфейсы
Все
getDeclaredClasses() – все классы и интерфейсы
Java Advanced / Collections Framework Классы и интерфейсы Открытые getClasses()

Слайд 21

Java Advanced / Collections Framework

Доступ к закрытым членам

По умолчанию доступ к

закрытым членам запрещен ? IllegalAccessException
Все члены extends AccessibleObject
setAccessible(boolean) – запросить доступ
isAccessible() – проверить доступ
Java Advanced / Collections Framework Доступ к закрытым членам По

Слайд 22

Java Advanced / Collections Framework

Пример: листинг класса

Class c = …;
for (Field

m : c.getDeclaredFields()) {
System.out.println(m);
}
for (Constructor m : c.getDeclaredConstructors()) {
System.out.println(m);
}
for (Method m : c.getDeclaredMethods()) {
System.out.println(m);
}
Java Advanced / Collections Framework Пример: листинг класса Class c

Слайд 23

Java Advanced / Collections Framework

Пример: создание экземпляра

// Получение класса
Class clazz =

Integer.class;
// Получение конструктора
Constructor c = clazz.getConstructor(int.class);
// Создание экземпляра
Integer i = (Integer) c.newInstance(100);
// Проверка
System.out.println(i);
Java Advanced / Collections Framework Пример: создание экземпляра // Получение

Слайд 24

Массивы

Часть 3

Массивы Часть 3

Слайд 25

Java Advanced / Collections Framework

Операции с массивами

Класс Array
Создание массива заданного типа
newInstance(Class,

length) – линейного
newInstance(Class, dims[]) – “кубического”
Чтение значения из массива
get(array, index) – ссылки
get*(array, index) – значения примитивного типа
Запись значения в массив
set(array, index, value) – ссылки
set*(array, index , value) – значения примитивного типа
Java Advanced / Collections Framework Операции с массивами Класс Array

Слайд 26

Java Advanced / Collections Framework

Массивы как типы

Имя типа массива
[имя_типа_элемента
Методы
isArray() – является

ли массивом
getComponentType() – тип элемента массива
Java Advanced / Collections Framework Массивы как типы Имя типа

Слайд 27

Java Advanced / Collections Framework

Имена для типов

Имена классов типов в массиве

кодируются специальным образом
Java Advanced / Collections Framework Имена для типов Имена классов типов в массиве кодируются специальным образом

Слайд 28

Загрузчики классов

Часть 4

Загрузчики классов Часть 4

Слайд 29

Java Advanced / Collections Framework

Загрузчики классов

Позволяют загружать и определять новые классы
Класс

ClassLoader
Методы
loadClass(name, resolve?) – загружает класс по имени
findLoadedClass(name) – найти уже загруженный класс
resolveClass(class) – загружает библиотеки
Java Advanced / Collections Framework Загрузчики классов Позволяют загружать и

Слайд 30

Java Advanced / Collections Framework

Дерево загрузчиков

Загрузчики образуют дерево
Загрузчики в разных ветвях

могут загрузить разные классы с одним полным именем
Java Advanced / Collections Framework Дерево загрузчиков Загрузчики образуют дерево

Слайд 31

Java Advanced / Collections Framework

Дополнительные возможности

Получения родителя
getParent()
Загрузка ресурсов
URL getResource(String name) –

определение местоположения ресурса по имени
getResourceAsStream(String name) – чтение ресурса по имени
Java Advanced / Collections Framework Дополнительные возможности Получения родителя getParent()

Слайд 32

Java Advanced / Collections Framework

Загрузчики и классы

Получение загрузчика
getClassLoader() – кто загрузил

класс
Thread.getContextClassLoader() – контекстный загрузчик
“Прямая” загрузка класса
Class.forName(name)
Java Advanced / Collections Framework Загрузчики и классы Получение загрузчика

Слайд 33

Java Advanced / Collections Framework

Реализации загрузчиков

Класс URLClassLoader
Загружает классы из нескольких мест,

заданных URL
Java Advanced / Collections Framework Реализации загрузчиков Класс URLClassLoader Загружает классы из нескольких мест, заданных URL

Слайд 34

Java Advanced / Collections Framework

Пример: загрузка класса

URL jar = new URL("file://.");
className

= "Test";
ClassLoader cl = new URLClassLoader(new URL[]{jar});
Class c = cl.loadClass(className);
Method m = c.getMethod("main", String[].class);
m.invoke(null, (Object) new String[]{"hello"});
Java Advanced / Collections Framework Пример: загрузка класса URL jar

Слайд 35

Параметры типов

Часть 5

Параметры типов Часть 5

Слайд 36

Java Advanced / Collections Framework

Информация о параметрах типов (ПТ)

Информация о конкретных

параметрах типов стирается
Информация о зависимостях типов сохраняется
Java Advanced / Collections Framework Информация о параметрах типов (ПТ)

Слайд 37

Java Advanced / Collections Framework

Получение информация о ПТ

Для классов
getGenericSuperclass()
getGenericInterfaces()
Для методов и

конструкторов
getGenericParameterTypes()
getGenericReturnType()
getGenericExceptionTypes()
Для полей
getGenericType()
Java Advanced / Collections Framework Получение информация о ПТ Для

Слайд 38

Java Advanced / Collections Framework

Представление информации о ПТ

Интерфейс Type
Классы Class
Параметризованный класс ParameterizedType
Переменная

типа TypeVariable
Wildcard WildcardType
Массивы GenericArrayType
Java Advanced / Collections Framework Представление информации о ПТ Интерфейс

Слайд 39

Java Advanced / Collections Framework

Параметризованные классы

Пример: Collection
Интерфейс ParameterizedType
getRawType() – не параметризованный

тип
getActualTypeArguments() – реальные аргументы типа
Java Advanced / Collections Framework Параметризованные классы Пример: Collection Интерфейс

Слайд 40

Java Advanced / Collections Framework

Переменные типа

Пример: T
Получение
getTypeParameters()
Интерфейс TypeVariable
getName() – имя переменной
getBounds()

– верхние границы
getGenericDeclaration() – кто объявил
Java Advanced / Collections Framework Переменные типа Пример: T Получение

Слайд 41

Java Advanced / Collections Framework

Wildcards

Пример: ? super HashSet extends Collection
Интерфейс Wildcard
getUpperBounds()

– Верхние границы
getLowerBounds() – Нижние границы
Java Advanced / Collections Framework Wildcards Пример: ? super HashSet

Слайд 42

Java Advanced / Collections Framework

Массивы

Тип элемента – переменная типа
Пример: T[]
Тип элемента

– параметризованный тип
Пример: Set[]
Интерфейс GenericArrayType
getGenericComponentType() – тип элемента
Java Advanced / Collections Framework Массивы Тип элемента – переменная

Слайд 43

Proxy

Часть 6

Proxy Часть 6

Слайд 44

Java Advanced / Collections Framework

Proxy

Механизм, позволяющий создавать фиктивные классы, реализующие требуемые

интерфейсы
Класс Proxy
Java Advanced / Collections Framework Proxy Механизм, позволяющий создавать фиктивные классы, реализующие требуемые интерфейсы Класс Proxy

Слайд 45

Java Advanced / Collections Framework

Класс InvocationHandler

Ему делегируются вызовы, совершенные для Proxy
Методы
invoke(Object

proxy, Method method, Object[] args) – уведомляет о вызове метода
Java Advanced / Collections Framework Класс InvocationHandler Ему делегируются вызовы,

Слайд 46

Java Advanced / Collections Framework

Методы Proxy

Создание экземпляра Proxy
newProxyInstance(ClassLoader, Class[] interfaces, InvocationHandler)
Получение

класса Proxy
getProxyClass(ClassLoader, Class[] interfaces)
Проверка класса
isProxyClass(Class)
Java Advanced / Collections Framework Методы Proxy Создание экземпляра Proxy

Слайд 47

Java Advanced / Collections Framework

Пример: профайлер (1)

Класс
public class Profiler implements InvocationHandler

{
// Экземпляр Proxy
private final Object instance;
// Реальная реализация
private final Object impl;

}
Java Advanced / Collections Framework Пример: профайлер (1) Класс public

Слайд 48

Java Advanced / Collections Framework

Пример: профайлер (2)

Конструктор
public Profiler(Class[] i8s, Object impl)

{
this.impl = impl;
instance = Proxy.newProxyInstance(null,
i8s, this);
}
Создание экземпляра
public Object getInstance() {
return instance;
}
Java Advanced / Collections Framework Пример: профайлер (2) Конструктор public

Слайд 49

Java Advanced / Collections Framework

Пример: профайлер (3)

Основной метод
public Object invoke(
Object proxy,

Method method, Object[] args
) throws IllegalAccessException, InvocationTargetException
{
System.out.println("Calling " + method +
" on " + impl);
return method.invoke(impl, args);
}
Java Advanced / Collections Framework Пример: профайлер (3) Основной метод

Слайд 50

Java Advanced / Collections Framework

Пример: профайлер (4)

Применение
public static void main(String[] args)

{
Integer i1 = new Integer(3);
Profiler profiler = new Profiler(
new Class[]{Comparable.class}, i1);
Comparable i2 =
(Comparable) profiler.getInstance();
System.out.println(i2.compareTo(i1));
}
Java Advanced / Collections Framework Пример: профайлер (4) Применение public

Слайд 51

Заключение

Часть 7

Заключение Часть 7

Слайд 52

Java Advanced / Collections Framework

Выводы

Reflection позволяет
Анализировать классы по время исполнения
Загружать классы

по имени
Создавать экземпляры классов по имени
Вызывать метод классов по имени
Оперировать значениями полей по имени
Создавать и оперировать с массивами по типу элемента
Создавать proxy для интерфейсов
Java Advanced / Collections Framework Выводы Reflection позволяет Анализировать классы

Слайд 53

Java Advanced / Collections Framework

Ссылки

Reflection (Guide) // http://java.sun.com/j2se/1.5.0/docs/guide/reflection/index.html
Reflection API Code Samples

// http://java.sun.com/developer/codesamples/refl.html
Using Java Reflection // http://java.sun.com/developer/technicalArticles/ALT/Reflection/index.html
The Reflection API (tutorial) // http://java.sun.com/docs/books/tutorial/reflect/index.html
Java Advanced / Collections Framework Ссылки Reflection (Guide) // http://java.sun.com/j2se/1.5.0/docs/guide/reflection/index.html
Имя файла: Reflection.pptx
Количество просмотров: 215
Количество скачиваний: 0