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