SlideShare une entreprise Scribd logo
1  sur  8
Язык программирования
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);
Вопросы?

Contenu connexe

Tendances

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

Tendances (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.
 

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

Курс Java-2016. Занятие 10. Reflection, mock
Курс Java-2016. Занятие 10. Reflection, mockКурс Java-2016. Занятие 10. Reflection, mock
Курс Java-2016. Занятие 10. Reflection, mock7bits
 
Django Rest Framework vs Graph Ql
Django Rest Framework vs Graph QlDjango Rest Framework vs Graph Ql
Django Rest Framework vs Graph QlAttract Group
 
08 - Java. Java-классы: взгляд изнутри
08 - Java. Java-классы: взгляд изнутри08 - Java. Java-классы: взгляд изнутри
08 - Java. Java-классы: взгляд изнутриRoman Brovko
 
Загрузчики классов в Java - коллекция граблей
Загрузчики классов в Java - коллекция граблейЗагрузчики классов в Java - коллекция граблей
Загрузчики классов в Java - коллекция граблейAnton Arhipov
 
Java. Наследование.
Java. Наследование.Java. Наследование.
Java. Наследование.Unguryan Vitaliy
 
02 - Классы и Объекты
02 - Классы и Объекты02 - Классы и Объекты
02 - Классы и Объектыphearnot
 
Lec 2 Java
Lec 2 JavaLec 2 Java
Lec 2 Javaitc73
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.Igor Shkulipa
 
Oop java.generics
Oop java.genericsOop java.generics
Oop java.genericsmuqaddas_m
 
АРК-ПЗ-1.pptx
АРК-ПЗ-1.pptxАРК-ПЗ-1.pptx
АРК-ПЗ-1.pptxrobete3065
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3Technopark
 
Java. Полиморфизм.
Java. Полиморфизм.Java. Полиморфизм.
Java. Полиморфизм.Unguryan Vitaliy
 
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 Objectsolegol
 
Java весна 2014 лекция 1
Java весна 2014 лекция 1Java весна 2014 лекция 1
Java весна 2014 лекция 1Technopark
 

Similaire à 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);