实训--day02反射

xiaoxiao2021-02-28  119

实训第二天:反射

反射:把Java类中的各种成分映射成一个个的Java对象。即利用反射技术对以个类进行解剖,把各个组成部分映射成一个对象。一般反射都是用再框架中的。

java.lang.reflect;

反射包中有几个很重要的类,Class,Method,Constructors,Field

Class;获得要操作的类的class属性。得到一个类的全类名对象有三种方法:

1:类名.class

2:对象.getClass()

3:Class.forName(“带路径的全类名”) 。第三种是最常用的。

Class对象是反射的基础,如果没有class去获取类对象,就没有后面反射的一系列操作。反射都是基于class获取到的对象进行的。

Constructor:用于获取相应的类的所有构造方法的。

步骤如下:

1:获得全类名的class对象 Class<?> clazz=Class.forName("com.xishiyou.khl.practice.Person"); 2:通过class对象获得所有的构造器并放置在一个数组中 Constructor<?>[] constructors=clazz.getConstructors(); 3:通过每个构造器对象获得要操作的类的实例对象 Person person=(Person) constructors[0].newInstance(); 4:通过实例对象操作方法 Person person1=(Person) constructors[1].newInstance("孔海海",22);

Method:获取对应类中的方法,可以只获取在类中定义的方法(getDeclaredMethods()),也可以获取包括继承自父类的方法在内的全部方法(getMethods())。

使用步骤如下:

1:获得全类名的class对象 Class<?> clazz=Class.forName("com.xishiyou.khl.practice.Person"); 2:获得该类的所有方法并放入一个method数组中 Method [] method=clazz.getMethods();

获取到对象之后,之一通过数组的每个元素分别取获取到每个方法的访问修饰符,返回值类型,方法名,参数列表等一系列的参数。

int getModifiers():得到访问修饰符对应的编号,再用Modifier.toString(modifiers)转换成相应的访问修饰符。

Class<?> getReturnType():获得返回值类型

Class<?> getParameterTypes():获得参数类型,因为可能不止一个,所以返回的是一个数组。

field:用于存放类中的属性。因为类中的属性为了保证安全性,都会使用private修饰,不让外界直接访问而是提供相应的存取方法,有了field,我们可以获得到对应的属性,通过一个参数的设置,使得可以直接操作那个属性。

一般步骤如下:

1:获得全类名的class对象 Class<?> clazz=Class.forName("cn.shixun.khl.classdemo.Person"); 2:通过class对象获得要操作的类的实例对象 Person person=(Person) clazz.newInstance(); 3:获得属性的field Field nameField=clazz.getDeclaredField("name"); 4:设置属性的权限为可以操作 nameField.setAccessible(true); 5:为属性进行赋值操作 nameField.set(person, "孔海海"); 6:取出属性值。 System.out.println(nameField.get(person));

转载请注明原文地址: https://www.6miu.com/read-73951.html

最新回复(0)