SlideShare a Scribd company logo
Язык программирования
JAVA
Лекция# 6 (Часть 2)
Reflection API
Моисеенко Антон
canggu@mail.ru
СПГУАП
Кафедра Информационно-Сетевых Технологий
Содержание курса
1. Доступ к информации о классе
2. Создание экземпляра класса
3. Вызов методов
Доступ к информации о классе
Reflection API – позволяет получать всю
возможную информацию о классе.
Существует 3 способа:
MyClass a = new MyClass();
Class<MyClass> aclass = a.getClass();
Class<MyClass> aclass = MyClass.class;
Class<?> c = Class.forName(“java.lang.Byte”);
• Classloader найдет указанный класс и
подгрузит
• Может выбрасывать ClassNotFoundException
• Используется когда необходимо подгружать
классы динамически
Доступ к информации о классе
• getName()
• полное имя (java.lang.integer)
• getSimpleName()
• короткое имя (Integer)
• getModifiers()
• модификаторы доступа (Modifier.isPublic(..))
• getSuperclass
• получение родителя, для интерфейсов возвращает null
• getInterfaces()
• получение всех имплементируемых (наследуемых для interface)
интерфейсов. Не учитывает интерфейсы суперкласса
Доступ к информации о классе
• getFields(): Field[] //только публичные, включая поля
суперкласса
• getDeclaredFields(): Field[]
• getField(String name): Field
• getMethods(): Method[] //только публичные , включая методы
суперкласса
• getDeclaredMethds(): Method[]
• getMethod(name, paramTypes): Method
• getConstructors(): Constructor<?>[]
• getDeclaredConstructors(): Constructor<?>[]
• getConstructor(paramTypes): Constructor<?>
• полное имя (java.lang.integer)
Создание экземпляра класса
Как динамически создать объект класса по его
имени?
• Если в классе определен дефолтовый конструктор:
Class<?> c = Class.forName(“SimpleService”);
Object obj = c.newInstance();
SimpleService test = (SimpleService)obj;
• Если в классе имеется конструктор с параметрами:
Constructor<?> con = c.getConstructor(…);
Object obj = con.newInstance(…);
Вызов методов
Class[] paramTypes = new Class[] {String.class, int.class}
Method method = c.getMethod(“MethodName”, paramTypes);
Object[] args= new Object[] {new String(“aa”), new Integer(10)};
Double d = (Double) method.invoke(obj, args);
Вопросы?

More Related Content

What's hot

Java. Lecture 02. Classes and Objects
Java. Lecture 02. Classes and ObjectsJava. Lecture 02. Classes and Objects
Java. Lecture 02. Classes and Objects
colriot
 
Лекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследованиеЛекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследование
metaform
 

What's hot (14)

Наследование и полиморфизм
Наследование и полиморфизмНаследование и полиморфизм
Наследование и полиморфизм
 
Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.
 
C++ Базовый. Занятие 09.
C++ Базовый. Занятие 09.C++ Базовый. Занятие 09.
C++ Базовый. Занятие 09.
 
Рефлексия в java
Рефлексия в javaРефлексия в java
Рефлексия в java
 
C++ Базовый. Занятие 16.
C++ Базовый. Занятие 16. C++ Базовый. Занятие 16.
C++ Базовый. Занятие 16.
 
C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.
 
C++ Базовый. Занятие 14.
C++ Базовый. Занятие 14.C++ Базовый. Занятие 14.
C++ Базовый. Занятие 14.
 
C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.
 
Java. Lecture 02. Classes and Objects
Java. Lecture 02. Classes and ObjectsJava. Lecture 02. Classes and Objects
Java. Lecture 02. Classes and Objects
 
C++ Базовый. Занятие 10.
C++ Базовый. Занятие 10.C++ Базовый. Занятие 10.
C++ Базовый. Занятие 10.
 
принципы ооп и программирование классов в C#
принципы ооп и программирование классов в C#принципы ооп и программирование классов в C#
принципы ооп и программирование классов в C#
 
Лекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследованиеЛекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследование
 
C# Desktop. Занятие 01.
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.
 
C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.
 

Similar to Java core-lect6-part2-reflection-api.ppt

Загрузчики классов в Java - коллекция граблей
Загрузчики классов в Java - коллекция граблейЗагрузчики классов в Java - коллекция граблей
Загрузчики классов в Java - коллекция граблей
Anton Arhipov
 
02 - Классы и Объекты
02 - Классы и Объекты02 - Классы и Объекты
02 - Классы и Объекты
phearnot
 
Lec 2 Java
Lec 2 JavaLec 2 Java
Lec 2 Java
itc73
 
Msu.Center.Lectures.J02 Classes And Objects
Msu.Center.Lectures.J02 Classes And ObjectsMsu.Center.Lectures.J02 Classes And Objects
Msu.Center.Lectures.J02 Classes And Objects
olegol
 
Java весна 2014 лекция 1
Java весна 2014 лекция 1Java весна 2014 лекция 1
Java весна 2014 лекция 1
Technopark
 

Similar to Java core-lect6-part2-reflection-api.ppt (18)

Курс Java-2016. Занятие 10. Reflection, mock
Курс Java-2016. Занятие 10. Reflection, mockКурс Java-2016. Занятие 10. Reflection, mock
Курс Java-2016. Занятие 10. Reflection, mock
 
Django Rest Framework vs Graph Ql
Django Rest Framework vs Graph QlDjango Rest Framework vs Graph Ql
Django Rest Framework vs Graph Ql
 
Drf vs Graphql
Drf vs GraphqlDrf vs Graphql
Drf vs Graphql
 
Step 3.1
Step 3.1Step 3.1
Step 3.1
 
08 - Java. Java-классы: взгляд изнутри
08 - Java. Java-классы: взгляд изнутри08 - Java. Java-классы: взгляд изнутри
08 - Java. Java-классы: взгляд изнутри
 
Загрузчики классов в Java - коллекция граблей
Загрузчики классов в Java - коллекция граблейЗагрузчики классов в Java - коллекция граблей
Загрузчики классов в Java - коллекция граблей
 
Java. Наследование.
Java. Наследование.Java. Наследование.
Java. Наследование.
 
02 - Классы и Объекты
02 - Классы и Объекты02 - Классы и Объекты
02 - Классы и Объекты
 
Lec 2
Lec 2Lec 2
Lec 2
 
Lec 2 Java
Lec 2 JavaLec 2 Java
Lec 2 Java
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.
 
Oop java.generics
Oop java.genericsOop java.generics
Oop java.generics
 
АРК-ПЗ-1.pptx
АРК-ПЗ-1.pptxАРК-ПЗ-1.pptx
АРК-ПЗ-1.pptx
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3
 
Java. Полиморфизм.
Java. Полиморфизм.Java. Полиморфизм.
Java. Полиморфизм.
 
Step 3.2
Step 3.2Step 3.2
Step 3.2
 
Msu.Center.Lectures.J02 Classes And Objects
Msu.Center.Lectures.J02 Classes And ObjectsMsu.Center.Lectures.J02 Classes And Objects
Msu.Center.Lectures.J02 Classes And Objects
 
Java весна 2014 лекция 1
Java весна 2014 лекция 1Java весна 2014 лекция 1
Java весна 2014 лекция 1
 

Java core-lect6-part2-reflection-api.ppt

  • 1. Язык программирования JAVA Лекция# 6 (Часть 2) Reflection API Моисеенко Антон canggu@mail.ru СПГУАП Кафедра Информационно-Сетевых Технологий
  • 2. Содержание курса 1. Доступ к информации о классе 2. Создание экземпляра класса 3. Вызов методов
  • 3. Доступ к информации о классе Reflection API – позволяет получать всю возможную информацию о классе. Существует 3 способа: MyClass a = new MyClass(); Class<MyClass> aclass = a.getClass(); Class<MyClass> aclass = MyClass.class; Class<?> c = Class.forName(“java.lang.Byte”); • Classloader найдет указанный класс и подгрузит • Может выбрасывать ClassNotFoundException • Используется когда необходимо подгружать классы динамически
  • 4. Доступ к информации о классе • getName() • полное имя (java.lang.integer) • getSimpleName() • короткое имя (Integer) • getModifiers() • модификаторы доступа (Modifier.isPublic(..)) • getSuperclass • получение родителя, для интерфейсов возвращает null • getInterfaces() • получение всех имплементируемых (наследуемых для interface) интерфейсов. Не учитывает интерфейсы суперкласса
  • 5. Доступ к информации о классе • getFields(): Field[] //только публичные, включая поля суперкласса • getDeclaredFields(): Field[] • getField(String name): Field • getMethods(): Method[] //только публичные , включая методы суперкласса • getDeclaredMethds(): Method[] • getMethod(name, paramTypes): Method • getConstructors(): Constructor<?>[] • getDeclaredConstructors(): Constructor<?>[] • getConstructor(paramTypes): Constructor<?> • полное имя (java.lang.integer)
  • 6. Создание экземпляра класса Как динамически создать объект класса по его имени? • Если в классе определен дефолтовый конструктор: Class<?> c = Class.forName(“SimpleService”); Object obj = c.newInstance(); SimpleService test = (SimpleService)obj; • Если в классе имеется конструктор с параметрами: Constructor<?> con = c.getConstructor(…); Object obj = con.newInstance(…);
  • 7. Вызов методов Class[] paramTypes = new Class[] {String.class, int.class} Method method = c.getMethod(“MethodName”, paramTypes); Object[] args= new Object[] {new String(“aa”), new Integer(10)}; Double d = (Double) method.invoke(obj, args);