Содержание
- 2. План лекции Понятие рефлексии Участники механизма рефлексии Получение информации о классе
- 3. Понятие рефлексии Рефлексия (от лат. reflexio – обращение назад) – обращение субъекта на себя самого, на
- 4. Возможности механизма рефлексии Загрузка типов во время исполнения программы Исследование структуры типов и их элементов Создание
- 5. Участники механизма рефлексии Класс java.lang.Class Класс является метаклассом по отношению к другим типам Экземпляры класса Class
- 6. Участники механизма рефлексии Пакет java.lang.reflect Содержит ряд дополнительных и вспомогательных классов Field Описывает поле объекта Method
- 7. Получение представления класса Метод static Class Class.forName(...) Возвращает ссылку на представление класса, полное имя которого указывается
- 8. Получение представления класса Метод Class[] Class.getClasses() Возвращает ссылку на массив ссылок на объекты Class вложенных типов
- 9. Получение информации о классе import java.lang.reflect.*; class ListMethods { public static void main(String[] argv) throws ClassNotFoundException
- 10. Возможности класса Class Загрузка класса в JVM по его имени static Class forName(String name) Определение вида
- 11. Возможности класса Class Получение списка всех полей и конкретного поля по имени Field[] getFields() Field getField(...)
- 12. Исследование методов ... Class cls = classC.getClass(); Method[] methods = cls.getMethods(); for (int i = 0;
- 13. Передача параметров в методы Поскольку на момент написания программы типы и даже количество параметров неизвестно, используется
- 14. Создание экземпляров классов Метод Object Class.newInstance() Возвращает ссылку на новый экземпляр класса, используется конструктор по умолчанию
- 15. Вызов методов Прямой вызов Если на момент написания кода известен реальный тип для полученной ссылки обобщенного
- 16. Вызов статического метода import java.lang.reflect.*; public class Main { public static void main(String[] args) { if
- 17. Нововведения Java5 Часть 1 © Составление, Будаев Д.С., Гаврилов А.В., 2013 Лекция 11.2 УНЦ «Инфоком» Самара
- 18. План лекции Обзор нововведений Статический импорт Автобоксинг Переменное количество аргументов Параметризованные типы Улучшенный цикл for Перечислимые
- 19. Что же произошло? Автоупаковка и автораспаковка (автобоксинг) Настраиваемые типы Улучшенный цикл for Аргументы переменной длины Перечислимые
- 20. Проблема Имеется: Хотелось бы: hypot = Math.sqrt(Math.pow(side1, 2) + Math.pow(side2, 2)); hypot = sqrt(pow(side1, 2) +
- 21. Статический импорт Импорт элемента типа import static pkg.TypeName.staticMemberName; Импорт всех элементов типа import static pkg.TypeName.*; import
- 22. Особенности статического импорта Повышает удобство написания программ и уменьшает объем кода Уменьшает удобство чтения программ Приводит
- 23. Проблема Имеется: Хотелось бы: List list = new LinkedList(); list.add(new Integer(1)); list.add(new Integer(10)); List list =
- 24. Автоупаковка / автораспаковка Автоупаковка – процесс автоматической инкапсуляции данных простого типа в экземпляр соответствующего ему класса-обертки
- 25. Особенности автоупаковки Происходит при присваивании, вычислении выражений и при передаче параметров Объекты создаются без использования ключевого
- 26. Проблема Имеется: Хотелось бы: int s1 = sum(new int[] {1, 2}); int s2 = sum(new int[]
- 27. Переменное количество аргументов Пример метода Пример вызова int sum(int ... a) { int s = 0;
- 28. Особенности переменного количества аргументов Внутри там все равно живет массив… Аргумент переменной длинны в методе может
- 29. Проблема Имеется: Хотелось бы: List list= new LinkedList (); list.add(10); list.add(5); list.add((Integer)list.get(0) + (Integer)list.get(1)); List list=
- 30. Параметризованные типы Параметризованные типы (настраиваемые типы, generic types) Позволяют создавать классы, интерфейсы и методы, в которых
- 31. Скромный пример Пример класса Пример использования class Generic { T obj; Generic(T o) {obj = o;}
- 32. Особенности параметризованных типов Использовать примитивные типы в качестве параметров-типов нельзя Если одинаковые настраиваемые типы имеют различные
- 33. Общий синтаксис Объявление настраиваемого типа class имяКласса {...} Создание ссылки и объекта настраиваемого типа имяКласса имяПеременной
- 34. Ограниченные типы Ограничение типа позволяет использовать у ссылок методы и поля, доступные в типе-ограничителе Типы, не
- 35. Метасимвольный аргумент Что делать при передаче экземпляров параметризованных типов в методы, т.е. как писать сигнатуру? Для
- 36. Метасимвол с ограничениями Ограничение сверху Тип super допускается Ограничение снизу Тип sub не допускается
- 37. Параметризованные методы Методы могут иметь собственные типы-параметры Фактические аргументы, передаваемые в формальные аргументы, имеющие тип-параметр, будут
- 38. Ряд особенностей Конструкторы могут быть параметризованными (даже если сам класс таковым не является) Интерфейсы могут быть
- 39. Ряд особенностей Нельзя создать массив типа-параметра Массивов элементов конкретной версии параметризованного типа не бывает class Generic
- 40. И как же это работает? Механизм стирания В реальном байт-коде никаких настраиваемых типов в целом-то и
- 41. Ошибки неоднозначности «Логически правильный» код Оказывается неверным с точки зрения компилятора И это – самый простой
- 42. Проблема Имеется: Хотелось бы: int[] nums = {1, 2, 3, 4, 5}; int sum = 0;
- 43. Улучшенный цикл for (for-each) Общая форма записи for (type iterVar : iterableObj) statement; Тип элемента Переменная
- 44. Работа улучшенного цикла for В каждом витке цикла «извлекается» очередной элемент агрегата Ссылка на него (для
- 45. Обработка многомерных массивов int sum = 0; int nums[][] = new int[3][5]; for (int i =
- 46. Особенности улучшенного цикла for По сути это внутренний итератор Переменная цикла доступна только для чтения… Порядок
- 47. Внимание, вопрос! А кто же управляет итерациями? Агрегат обязан реализовывать интерфейс java.lang.Iterable Сей интерфейс содержит лишь
- 48. Проблема Имеется: Хотелось бы: class Apple { public static final int JONATHAN = 0; public static
- 49. Перечислимые типы Перечислимый тип Apple Константы перечислимого типа Jonathan, GoldenDel, RedDel… Объявление переменной Присвоение переменной значения
- 50. Перечислимые типы Проверка равенства Использование в блоке переключателей if(ap == Apple.GoldenDel) switch(ap) { case Jonathan: //...
- 51. А теперь отличия от классики Перечислимый тип – это класс! Да к тому же имеет методы!
- 52. И еще отличия… Можно определять конструкторы, добавлять поля и методы, реализовывать интерфейсы enum Apple { Jonathan(10),
- 53. Особенности перечислимых типов Создавать экземпляры с помощью оператора new нельзя! Все перечислимые типы наследуют от класса
- 54. Проблема Имеется: вся информация о классе содержится непосредственно в нем комментарии доступны только если доступен исходный
- 55. Метаданные В основе механизма метаданных лежат так называемые аннотации Аннотация – это «интерфейс» специфического вида, позволяющий
- 56. Особенности аннотаций Члены-методы имеют, скорее, смысл полей Тела этих методов будут создаваться автоматически Аннотациями можно снабжать
- 57. Особенности аннотаций В любом случае аннотация предшествует объявлению Все аннотации наследуют от интерфейса java.lang.annotation.Annotation Во время
- 58. Особенности аннотаций Для методов допускаются значения по умолчанию @Retention(RetentionPolicy.RUNTIME) @interface MyAnnotation { String str() default "Testing";
- 59. Особенности аннотаций Бывают одночленные аннотации Содержат один член и имеют сокращенную форму записи Бывают аннотации-маркеры Предназначены
- 60. Правила сохранения аннотаций Правила сохранения аннотаций определяют, в какой момент аннотации будут уничтожены Правила задаются с
- 61. Правила сохранения аннотаций Задание правила сохранения производится с помощью аннотации java.lang.annotation.Retention По умолчанию задается правило CLASS
- 62. Стандартные аннотации (работа с аннотациями) @Retention Применяется к аннотациям, позволяет задать правило сохранения @Documented Применяется к
- 63. Стандартные аннотации (инструкции компилятора) @Override Применяется к методам, указывает, что метод обязан переопределять метод родительского класса
- 64. Особенности аннотаций Аннотация не может наследовать другую аннотацию Методы аннотаций не должны иметь параметров Возвращаемый тип
- 65. Спасибо за внимание!
- 67. Скачать презентацию