JAVA反射机制
反射:在程序的运行状态中,对任意一个类 都能够获取它的属性 和方法; 对于任意一个对象,都能调用它的属性 和 方法;动态获取信息的方式,以及动态获取方法的功能称为Java的反射机制;
如何动态获取:将Java源文件(.java) 编译成 字节码文件(.class), 然后在 获取对应的 类中方法属性;
一、创建反射的三种方式
//通过 对象.getClass
1. Class classDemo = demo02.getClass();
//通过 类.class
2. classDemo = Demo02.class;
//通过 class.forName
3. classDemo=Class.forName("com.yc123.demo.Demo02");
二、获取类的方法、属性
获取属性
//获取公有属性.getFields();
Field[]fields = classDemo.getFields();
//获取所有属性.getDeclaredFields();
Field[]fields = classDemo.getDeclaredFields();
/获取单个属性 .getField("字段");
Field field = classDemo.getField("age");
属性相关操作
//获取属性值 .get(对象);
field.get(demo);
获取属性名称 .getName();
field.getName();
获取属性修饰符 .getModifiers();
Modifier.toString(field.getModifiers());
获取属性类型 .getType();
field.getType();
设置属性访问权限
field.setAccessible(true);
获取属性值 .set(对象,"属性值");
field.set(nc,"white");
获取方法
获取运行时类及其父类中所有公有(public)方法 .getMethods();
methods = classPer.getMethods();
获取获取运行时类及其父类中所有声明的方法 .getDeclaredMethods();
methods = classPer.getDeclaredMethods();
获取指定方法 .getMethod(“方法名”, 参数类型.class);
Method = classPer.getMethod(“walk”,String.class);
设置方法访问权限
method.setAccessible(true);
反射到方法带参数的对象中
method.invoke(person,"cys");
方法相关操作
获取方法名
method.getName();
获取参数个数
method.getParameterCount();
获取返回值类型
method.getReturnType();
获取参数列表
Arrays.asList(method.getParameters());
获取修饰符
Modifier.toString(method.getModifiers());
获取构造方法
1.获取所有构造方法 .getConstructors();
Constructor[] cons = classPer.getConstructors();
静态方法的调用:
Method method = clazz.getMethod("staticInfo");
method.invoke(Person.class);