Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


Для правообладателей

Обратная связь

Email: Нажмите что бы посмотреть 

Яндекс.Метрика

Презентация на тему Поняття про відображення (reflection, інтроспекція)

Поняття про відображення (reflection, інтроспекція)Засоби, які дозволяють під час виконання програми отримувати інформацію про класи, їх поля і методиБільш загально – для динамічної роботи з кодом. Наприклад – створити екземпляр класу, назва якого вводиться в рядку.Базовий
Reflection Поняття про відображення (reflection, інтроспекція)Засоби, які дозволяють під час виконання програми отримувати Отримання інформації про клас – базові можливостіString s = Три способи отримання екземпляру класу Classметод getClass() класу Object;виклик статичного методу Class.forName(ім’я Приклад: отримання методів класуimport java.io.*;import java.lang.reflect.*;public class reflection {public static void main(String[] Різниця між getMethods та getDeclaredMethodsПерший повертає всі публічні методи з урахуванням успадкування, Динамічне завантаження класу та створення екземпляруpublic static void main(String[] args) throws Exception Або:Class cl = Kl.class;Kl ekz = cl.newInstance();ekz.metod(); Як це зробити більш гнучко?Треба уникнути зведень до класу, який за ідеєю Злам приватності: класclass Bastion {private String msg = Злам приватності: власне зламBastion b = new Bastion();    System.out.println( Вказівники на функцію: клас з функцією…class Ext {private int Pole;  public … і виклик функції Method m = Ext.class.getMethod( Ще один приклад: виведення таблиці значень функціїMethod square = Ext.class.getMethod( Конструктивна приватністьВправа: Написати консольне застосування, яке за допомогою Reflection (виклик newInstance) створює
Слайды презентации

Слайд 2 Поняття про відображення (reflection, інтроспекція)
Засоби, які дозволяють під

Поняття про відображення (reflection, інтроспекція)Засоби, які дозволяють під час виконання програми

час виконання програми отримувати інформацію про класи, їх поля

і методи
Більш загально – для динамічної роботи з кодом. Наприклад – створити екземпляр класу, назва якого вводиться в рядку.
Базовий інструмент – клас Class.
Додаткові можливості – пакет java.lang.reflect.

Слайд 3 Отримання інформації про клас – базові можливості
String s

Отримання інформації про клас – базові можливостіString s =

= "qwerty";
Class kl = s.getClass();

System.out.println (kl.getSimpleName() + " is a subclass of " +
kl.getSuperclass().getSimpleName());

Слайд 4 Три способи отримання екземпляру класу Class
метод getClass() класу

Три способи отримання екземпляру класу Classметод getClass() класу Object;виклик статичного методу

Object;
виклик статичного методу Class.forName(ім’я класу) – завантаження класу за

іменем;
T.class, де Т-деякий тип.


Слайд 5 Приклад: отримання методів класу
import java.io.*;
import java.lang.reflect.*;
public class reflection

Приклад: отримання методів класуimport java.io.*;import java.lang.reflect.*;public class reflection {public static void

{
public static void main(String[] args) throws Exception {
BufferedReader br=new

BufferedReader(new InputStreamReader
(System.in));
System.out.println("Enter class name");
String clName=br.readLine();
Class cl = Class.forName(clName);
Method[] M = cl.getMethods();
for (Method m:M) {System.out.println(m);}
}
}


Слайд 6 Різниця між getMethods та getDeclaredMethods
Перший повертає всі публічні

Різниця між getMethods та getDeclaredMethodsПерший повертає всі публічні методи з урахуванням

методи з урахуванням успадкування, а другий – всі методи,

визначені в цьому класі.
Задача: вивести список всіх методів, які визначені в класі, але лише публічних.

Слайд 7 Динамічне завантаження класу та створення екземпляру
public static void

Динамічне завантаження класу та створення екземпляруpublic static void main(String[] args) throws

main(String[] args) throws Exception {
Class

c = Class.forName("dinload.A");
A a = (A) c.newInstance();
a.inform();
}
}
class A {
static { System.out.println("A is initialized"); }
A() { System.out.println("Instance created"); }
void inform() { System.out.println(“ You can create dinamic instance"); }
}

Слайд 8 Або:
Class cl = Kl.class;
Kl ekz = cl.newInstance();
ekz.metod();

Або:Class cl = Kl.class;Kl ekz = cl.newInstance();ekz.metod();

Слайд 9 Як це зробити більш гнучко?
Треба уникнути зведень до

Як це зробити більш гнучко?Треба уникнути зведень до класу, який за

класу, який за ідеєю прикладу має бути невідомим.
Крім того,

і ім’я методу може бути невідомим на етапі компіляції.
Як це зробити?

Слайд 10 Злам приватності: клас
class Bastion {
private String msg =

Злам приватності: класclass Bastion {private String msg =

"You cannot change this string";

public String getMsg() {

return msg;
}

private void metod() {
System.out.println("This method is private!");
}
}


Слайд 11 Злам приватності: власне злам
Bastion b = new Bastion();

Злам приватності: власне зламBastion b = new Bastion();  System.out.println(

System.out.println("Our field is: "+b.getMsg());

//b.str="Ku-ku"; - це не компілюється
Class bk = b.getClass();
Field fld = bk.getDeclaredField("msg");
fld.setAccessible(true);
fld.set(b, "Das ist ku-ku");
fld.setAccessible(false);
System.out.println("The cracked field is: "+b.getMsg());
//b.inform(); - це не компілюється
Method m = bk.getDeclaredMethod("metod");
m.setAccessible(true);
m.invoke(b);
m.setAccessible(false);

Слайд 12 Вказівники на функцію: клас з функцією…
class Ext {
private

Вказівники на функцію: клас з функцією…class Ext {private int Pole; public

int Pole;

public Ext(int Pole) {

this.Pole = Pole;
}
public void metod() {
System.out.println("The field of this object is "+Pole);
}
}

Слайд 13 … і виклик функції
Method m = Ext.class.getMethod("metod");

… і виклик функції Method m = Ext.class.getMethod(

Ext ext = new Ext(50);

m.invoke(ext);

Слайд 14 Ще один приклад: виведення таблиці значень функції
Method square

Ще один приклад: виведення таблиці значень функціїMethod square = Ext.class.getMethod(

= Ext.class.getMethod("square", double.class);
Method sqrt =

Math.class.getMethod("sqrt", double.class);

for (double x=from; x<=to; x+=dx) {

double y = (Double) f.invoke(null, x);
System.out.printf("%10.4f | %10.4f%n",x,y);
}

  • Имя файла: ponyattya-pro-vіdobrazhennya-reflection-іntrospektsіya.pptx
  • Количество просмотров: 91
  • Количество скачиваний: 0