Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 9 лет назад пользователемНаталия Чулкова
1 1 © Luxoft Training 2013 Модуль 7 Введение Исследование классов 7-1 Механизм Reflection
2 2 © Luxoft Training 2013Введение Отражение или рефлексия или интроспекция (reflection) - процесс, во время которого программа может отслеживать и модифицировать собственную структуру и поведение Парадигма программирования, положенная в основу отражения, называется рефлексивным программированием 7-2 Что такое Reflection
3 3 © Luxoft Training 2013Введение Java Reflection API позволяет просматривать информацию о классах, интерфейсах, методах, полях, конструкторах, аннотациях во время выполнения java программы. При этом знать названия исследуемых элементов заранее не обязательно 7-3 Что такое Reflection
4 4 © Luxoft Training 2013 Модуль 7 Введение Исследование классов 7-4 Механизм Reflection
5 5 © Luxoft Training 2013 Исследование классов Используя reflection можно извлекать следующую информацию о классе: Имя класса Модификаторы доступа Информацию о пакете Суперклассы Имплементированные интерфейсы Так же можно загрузить класс, зная его имя и создать экземпляр класса 7-5 Введение
6 6 © Luxoft Training 2013 Исследование классов Конструкторы Методы Поля Аннотации 7-6 Введение
7 7 © Luxoft Training 2013 Исследование классов Перед тем, как исследовать класс, необходимо получить объект java.lang.Class, описывающий этот класс Все классы java (включая примитивы и массивы) имеют ассоциированный java.lang.Class 7-7 Объект Class
8 8 © Luxoft Training 2013 Исследование классов java.lang.Class можно получить тремя способами: Class myObjectClass = myObject.getClass() Class myClass = MyClass.class Также можно загрузить класс, зная его полное имя: 7-8 Объект Class
9 9 © Luxoft Training 2013 Исследование классов Полное имя класса: Имя класса без пакета: 7-9 Получение имени класса
10 10 © Luxoft Training 2013 Исследование классов С помощью можно получить битовую маску, определяющую модификаторы доступа класса Получение модификатора класса
11 11 © Luxoft Training 2013 Исследование классов С помощью группы методов Modifiers.isAbstract(int modifiers), Modifiers.isFinal(int modifiers), Modifiers.isInterface(int modifiers) и др. можно определить соответствующий модификатор 7-11 Получение модификатора класса
12 12 © Luxoft Training 2013 Исследование классов Package package = aClass.getPackage() Объект package описывает информацию о пакете, такую как имя пакета 7-12 Получение информации о пакете
13 13 © Luxoft Training 2013 Исследование классов Class superclass = aClass.getSuperclass(); Можно продолжить получение всей иерархии, вплоть до класса Object 7-13 Получение суперкласса
14 14 © Luxoft Training 2013 Исследование классов Class[] interfaces = aClass.getInterfaces(); Будут возвращены классы, описывающие только те интерфейсы, которые явно декларированы в implements 7-14 Имплементированные интерфейсы
15 15 © Luxoft Training 2013 Исследование классов Конструкторы, методы, поля и аннотации можно получить с помощью 7-15 Получение прочих элементов класса
16 16 © Luxoft Training 2013 Исследование классов Соответствующие классы Constructor, Method, Field, Annotation служат для описания соответствующего элемента 7-16 Получение прочих элементов класса
17 17 © Luxoft Training 2013 Создание экземпляры класса Метод класса Class newInstance() создает экземпляр класса, который описывает данный Class Это эквивалентно созданию объекта используя оператор new и, вызывая конструктор без параметров: 7-17 Class.newInstance()
18 18 © Luxoft Training 2013 Создание экземпляры класса При этом могут возбуждаться исключения: IllegalAccessException если класс или его конструктор без параметров не доступны 7-18 Class.newInstance()
19 19 © Luxoft Training 2013 Создание экземпляры класса InstantiationException если Class определяет абстрактный класс, интерфейс массив классов, примитив или void ExceptionInInitializerError если произошла ошибка при выполнении инициализатора класса SecurityException если нет прав на создание экземпляра 7-19 Class.newInstance()
20 20 © Luxoft Training 2013 Безопасность reflection Использование reflection в общем случае небезопасно, т.к. можно создать экземпляр класса по имени, вызвать у него методы, поля (возможно приватные) Класс SecurityManager позволяет приложения определить политику безопасности 7-20 Класс SecurityManager
21 21 © Luxoft Training 2013 Безопасность reflection SecurityManager позволяет перед выполнением важной, потенциально опасной операции проверить, разрешена ли она в данной JVM Если нет – возбуждается SecurityException 7-21 Класс SecurityManager
22 22 © Luxoft Training 2013 Безопасность reflection Метод SecurityManager.checkAccess() проверяет, может ли текущий поток выполнения иметь доступ к членам класса 7-22 Класс SecurityManager
23 23 © Luxoft Training 2013 Безопасность reflection Политика безопасности задается во внешнем файле в специальном формате Данный файл подключается к JVM с помощью свойства: -D java.security.policy=my.policy 7-23 Класс SecurityManager
24 24 © Luxoft Training 2013Упражнение 7-24 Упражнение 19 Использование механизмов reflection
25 25 © Luxoft Training 2013 Модуль 7 Введение Исследование классов 7-25 Механизм Reflection
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.