2021-06-01 15:50

小记一下已学的Java中的反射机制

潘维科

JavaEE

(1152)

(1)

收藏

一、反射的理解

Java的反射机制就是 在运行状态下①,可以获取任意一个类或着对象的所有信息(包名及类名、所有方法、所有属性【包括private私有属性】),并且可以随意调用方法或更改属性。

①:因为java的反射机制是从JVM虚拟机中获取已编译的class类,转化到内存中,成为一个存在内存中的可更改的动态类。所以需要在运行状态下。

二、通过反射获取类共有三种方法

1、通过带包名的类名获取

Class clazz =  Class.forName("com.wanmait.test.Test");

2、通过对象获取

Person person = new Person();
Class clazz = person.getClass();

3、通过类名.class获取(每一个类都有一个隐藏静态属性class)

Class clazz = Person.class;

三、反射常用的方法

1、获取带包名的类名

String className = clazz.getName();

2、获取不带包名的类名

String className = clazz.getSimpleName();

3、获取所有public方法和父类方法的信息(修饰符、返回值、包名+类名+方法名、参数)

Method[] methods = clazz.getMethods();

4、获取类本身所有方法的信息(修饰符、返回值、包名+类名+方法名、参数)【包含私有方法,不包含父类方法】

Method[] methods = clazz.getDeclaredMethods();

5、只获取方法的名字

String methodName = methods[i].getName();

6、获取方法的返回值

Class returnType = methods[i].getReturnType();

7、获取方法返回值的名字

String returnName = returnType.getSimpleName();

8、获取方法的参数

Parameters[] parameter = methods[i].getParameters();

9、获取参数的类型

Class paramType = parameter[i].getType();

10、获取类的public属性

Field[] fields = clazz.getFields();

11、获取类的所有属性

Field[] fields = clazz.getDeclaredFields();

12、获取一个方法

Method method = clazz.getDeclaredMethod("方法名","参数");//根据参数数量分辨调用的方法
Method method = clazz.getDeclaredMethod("方法名");//只写方法名就是调用无参函数

13、通过反射获得的类创建对象

Person person = (Person)clazz.getDeclaredConstructor().newInstance();

13、执行方法(需创建对象)

method.invoke(对象);
method.invoke(对象,参数);

14、把private的方法设置为可调用

method.setAccessible(true);

15、获取类的一个属性

Field field = clazz.getField("age");

16、获取某一对象里的属性的值(需创建对象)

Object fieldValue = field.get(对象);

17、设置某一对象的属性的值(需创建对象)

field.set(对象,值);

1条评论

点击登录参与评论