1 © Luxoft Training 2013 Модуль 7 Введение Исследование классов 7-1 Механизм Reflection.

Презентация:



Advertisements
Похожие презентации
1 © Luxoft Training 2013 Модуль 8 Введение Задачи аннотаций Стандартные аннотации Создание собственных аннотаций 8-1 Аннотации.
Advertisements

1 © Luxoft Training 2012 Java: расширенные вопросы Модуль #8.
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Полиморфизм. Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
Основы ООП и C# Работа с объектами и классами. Классы Класс специальный тип данных для описания объектов. Он определяет данные и поведение типа. Определение.
Объектная модель Ruby Денис С. Мигинский. Основные характеристики объектной модели Обязательные: Поддержка классов Поддержка описания поведения класса.
Java: интерфейсы, наследование, обработка исключительных ситуаций Вашенков Олег Евгеньевич.
Лекция 8. Введение в ООП. Часть 1 Красс Александр СПбГУ ИТМО, 2008.
© Luxoft Training 2013 Using Reflection API in Java.
1 Java 6. ИНТЕРФЕЙСЫ И ВНУТРЕННИЕ КЛАССЫ. 2 Интерфейсы Не являются классами Ни один из объявленных методов не может быть реализован внутри интерфейса.
Интерфейсы Лекция 4. Реализуйте очередь в виде списка, содержащую комплексные числа Реализуйте методы void Enqueue(Complex с ) – помещает число в очередь.
Изучение динамического определения типов. Класс Class. Динамическая загрузка и инстанцирование классов. В Java вся информация о классе хранится в специальном.
1 © Luxoft Training 2013 Модуль 9 Введение Уровни логирования Хэндлеры Фильтры Иерархия логеров Общий сценарий логирования Конфигурационные файлы 9-1 Система.
OOП Инна Исаева. Подпрограмма – это большая программа, разделённая на меньшие части. В программе одна из подпрограмм является главной. Её задача состоит.
1 © Luxoft Training 2012 Понятие Java приложения Модуль #4.
Множественное наследование class A {... }; class B {... }; class C : public A, protected B {... }; !!! Спецификатор доступа распространяется только на.
1 © Luxoft Training 2013 Модуль Спецификация Java Beans. Цели Правила описания Java Bean Обзор спецификации Java Beans Использование технологии в.
Высокоуровневые методы информатики и программирования Лекция 14 Интерфейсы.
Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
Объектно-ориентированный подход в языке C#. Класс в языке C# - ссылочный тип, определенный пользователем. Для классов ЯП C# допустимо только единичное.
Транксрипт:

1 © Luxoft Training 2013 Модуль 7 Введение Исследование классов 7-1 Механизм Reflection

2 © Luxoft Training 2013Введение Отражение или рефлексия или интроспекция (reflection) - процесс, во время которого программа может отслеживать и модифицировать собственную структуру и поведение Парадигма программирования, положенная в основу отражения, называется рефлексивным программированием 7-2 Что такое Reflection

3 © Luxoft Training 2013Введение Java Reflection API позволяет просматривать информацию о классах, интерфейсах, методах, полях, конструкторах, аннотациях во время выполнения java программы. При этом знать названия исследуемых элементов заранее не обязательно 7-3 Что такое Reflection

4 © Luxoft Training 2013 Модуль 7 Введение Исследование классов 7-4 Механизм Reflection

5 © Luxoft Training 2013 Исследование классов Используя reflection можно извлекать следующую информацию о классе: Имя класса Модификаторы доступа Информацию о пакете Суперклассы Имплементированные интерфейсы Так же можно загрузить класс, зная его имя и создать экземпляр класса 7-5 Введение

6 © Luxoft Training 2013 Исследование классов Конструкторы Методы Поля Аннотации 7-6 Введение

7 © Luxoft Training 2013 Исследование классов Перед тем, как исследовать класс, необходимо получить объект java.lang.Class, описывающий этот класс Все классы java (включая примитивы и массивы) имеют ассоциированный java.lang.Class 7-7 Объект Class

8 © Luxoft Training 2013 Исследование классов java.lang.Class можно получить тремя способами: Class myObjectClass = myObject.getClass() Class myClass = MyClass.class Также можно загрузить класс, зная его полное имя: 7-8 Объект Class

9 © Luxoft Training 2013 Исследование классов Полное имя класса: Имя класса без пакета: 7-9 Получение имени класса

10 © Luxoft Training 2013 Исследование классов С помощью можно получить битовую маску, определяющую модификаторы доступа класса Получение модификатора класса

11 © Luxoft Training 2013 Исследование классов С помощью группы методов Modifiers.isAbstract(int modifiers), Modifiers.isFinal(int modifiers), Modifiers.isInterface(int modifiers) и др. можно определить соответствующий модификатор 7-11 Получение модификатора класса

12 © Luxoft Training 2013 Исследование классов Package package = aClass.getPackage() Объект package описывает информацию о пакете, такую как имя пакета 7-12 Получение информации о пакете

13 © Luxoft Training 2013 Исследование классов Class superclass = aClass.getSuperclass(); Можно продолжить получение всей иерархии, вплоть до класса Object 7-13 Получение суперкласса

14 © Luxoft Training 2013 Исследование классов Class[] interfaces = aClass.getInterfaces(); Будут возвращены классы, описывающие только те интерфейсы, которые явно декларированы в implements 7-14 Имплементированные интерфейсы

15 © Luxoft Training 2013 Исследование классов Конструкторы, методы, поля и аннотации можно получить с помощью 7-15 Получение прочих элементов класса

16 © Luxoft Training 2013 Исследование классов Соответствующие классы Constructor, Method, Field, Annotation служат для описания соответствующего элемента 7-16 Получение прочих элементов класса

17 © Luxoft Training 2013 Создание экземпляры класса Метод класса Class newInstance() создает экземпляр класса, который описывает данный Class Это эквивалентно созданию объекта используя оператор new и, вызывая конструктор без параметров: 7-17 Class.newInstance()

18 © Luxoft Training 2013 Создание экземпляры класса При этом могут возбуждаться исключения: IllegalAccessException если класс или его конструктор без параметров не доступны 7-18 Class.newInstance()

19 © Luxoft Training 2013 Создание экземпляры класса InstantiationException если Class определяет абстрактный класс, интерфейс массив классов, примитив или void ExceptionInInitializerError если произошла ошибка при выполнении инициализатора класса SecurityException если нет прав на создание экземпляра 7-19 Class.newInstance()

20 © Luxoft Training 2013 Безопасность reflection Использование reflection в общем случае небезопасно, т.к. можно создать экземпляр класса по имени, вызвать у него методы, поля (возможно приватные) Класс SecurityManager позволяет приложения определить политику безопасности 7-20 Класс SecurityManager

21 © Luxoft Training 2013 Безопасность reflection SecurityManager позволяет перед выполнением важной, потенциально опасной операции проверить, разрешена ли она в данной JVM Если нет – возбуждается SecurityException 7-21 Класс SecurityManager

22 © Luxoft Training 2013 Безопасность reflection Метод SecurityManager.checkAccess() проверяет, может ли текущий поток выполнения иметь доступ к членам класса 7-22 Класс SecurityManager

23 © Luxoft Training 2013 Безопасность reflection Политика безопасности задается во внешнем файле в специальном формате Данный файл подключается к JVM с помощью свойства: -D java.security.policy=my.policy 7-23 Класс SecurityManager

24 © Luxoft Training 2013Упражнение 7-24 Упражнение 19 Использование механизмов reflection

25 © Luxoft Training 2013 Модуль 7 Введение Исследование классов 7-25 Механизм Reflection