转载

java反射

java反射概念

JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

使用

1.首先要获取Class对象,有三种方法

Cat cat=new Cat();
Class cat1=Class.forName("com.ncu.reflect.Cat");//Class.forName("全类名")
Class cat2=Cat.class;                           //类名.class
Class cat3=cat.getClass();                      //对象名.getclass()

2.获取实体类的字段

Field[] getDeclaredFields()                 //获取所有字段,不限修饰符
Field getDeclaredFields(String name)        //获取指定字段,不限修饰符
Field[] getFields()                         //获取所有public修饰的成员变量
Field getField(String name)                 //获取指定名称的public修饰的成员变量
//获取Cat类中所有字段,不限修饰符
Class cat1=Class.forName("com.ncu.reflect.Cat");
Field[] fields = cat1.getDeclaredFields();

3.Field类用来设置和获取字段值的方法

Cat cat=new Cat();
Field age = cat1.getDeclaredField("age");
age.set(cat,"15");                        //将cat对象age字段值设置为15
System.out.println(age.get(cat));         //获取cat对象age字段值

4.获取成员方法

跟获取字段方法雷同
Method[] getMethods()  
Method getMethod(String name, 类<?>... parameterTypes)  
Method[] getDeclaredMethods()  
Method getDeclaredMethod(String name, 类<?>... parameterTypes) 
//
Method eat = cat1.getMethod("eat", null);//获取一个public修饰符,无参的eat函数
eat.invoke(cat);                         //调用eat函数

5.获取构造函数

Constructor<?>[] getConstructors()
Constructor<T> getConstructor(类<?>... parameterTypes)
Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)
Constructor<?>[] getDeclaredConstructors()

cat1.getConstructors();//获取Cat类的无参构造函数

使用场景

  • 使用框架时有时候不知道有什么类,类有什么方法,就需要使用反射
  • 可以将要使用的类和方法放在配置文件,不修改该类任何代码,可以创建任意其他类的对象,可以执行任意方法,达到解耦功能。只需要改变配置文件
原文  https://segmentfault.com/a/1190000019862346
正文到此结束
Loading...