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类的无参构造函数
使用场景
- 使用框架时有时候不知道有什么类,类有什么方法,就需要使用反射
- 可以将要使用的类和方法放在配置文件,不修改该类任何代码,可以创建任意其他类的对象,可以执行任意方法,达到解耦功能。只需要改变配置文件
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。