反射_案例与反射_获取字节码Class对象的三种方式
反射_案例
Class对象功能:
获取功能:
1.获取成员变们
Field[] getFields() :获取所有public修饰的成员变量
Field getField(string name) 获取指定名称的public修饰的成员变量
Field[] getDeclaredFields()获取所有的成员变量,不考虑修饰符
Field getDeclaredField(string name)
2.获取构造方法们
constructor<?>[]getconstructors()
constructor<T> getconstructor(类<?>... parameterTypes)
constructor<T> getDeclaredconstructor(类<?>... parameterTypes)
constructor<?>[getDeclaredconstructors()
3。获取成员方法们︰
Method[] getMethods()
Method getMethod(string name,类<?>... parameterTypes)
Method[] getDeclaredMethods()
Method getDeclaredMethod(string name,类<?>... parameterTypes)
4.获取类名
String getName()
反射_获取字节码Class对象的三种方式
1.获取成员变们
Field[] getFields() :获取所有public修饰的成员变量
Field getField(string name) 获取指定名称的public修饰的成员变量
Field[] getDeclaredFields()获取所有的成员变量,不考虑修饰符
Field getDeclaredField(string name)
2.获取构造方法们
constructor<?>[]getconstructors()
constructor<T> getconstructor(类<?>... parameterTypes)
constructor<T> getDeclaredconstructor(类<?>... parameterTypes)
constructor<?>[getDeclaredconstructors()
3。获取成员方法们︰
Method[] getMethods()
Method getMethod(string name,类<?>... parameterTypes)
Method[] getDeclaredMethods()
Method getDeclaredMethod(string name,类<?>... parameterTypes)
4.获取类名
String getName()
Field:成员变量
操作:
1.设置值
void set(Object obj,Object value)
2.获取值
get (Object obj)
3.忽略访问权限修饰符的安全检查
field.setAccessible(true);//暴力反射
class对象功能∶获取功能∶
package day01.Demo01_Day017.da; import java.lang.reflect.Field; /* class对象功能∶ 获取功能∶ 1.获取成员变们 Field[] getFields() Field getField(string name) Field[] getDeclaredFields() Field getDeclaredField(string name) 2.获取构造方法们 constructor<?>[]getconstructors() constructor<T> getconstructor(类<?>... parameterTypes) constructor<T> getDeclaredconstructor(类<?>... parameterTypes) constructor<?>[getDeclaredconstructors() 3。获取成员方法们︰ Method[] getMethods() Method getMethod(string name,类<?>... parameterTypes) Method[] getDeclaredMethods() Method getDeclaredMethod(string name,类<?>... parameterTypes) 4.获取类名 String getName() */ public class ReflectDemo2 { public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException { //1.获取Person的class对象 Class<Person> personClass = Person.class; /* 1.获取成员变们 Field[] getFields() Field getField(string name) Field[] getDeclaredFields() Field getDeclaredField(string name) */ //1. Field[] getFields() Field[] fields = personClass.getFields(); for (Field field : fields) { System.out.println(field); } System.out.println("--------------"); Field a = personClass.getField("a"); //获取成员变量a的值 Person p = new Person(); Object value = a.get(p); System.out.println(value); //设a的值 a.set(p,"张三"); System.out.println(p); System.out.println("====================="); //Field[] getDeclaredFields()//获取所有的成员变量,不考虑修饰符 Field[] declaredFields = personClass.getDeclaredFields(); for (Field declaredField : declaredFields) { System.out.println(declaredField); } //Field getDeclaredField(string name) Field field = personClass.getDeclaredField("d"); //忽略访问权限修饰符的安全检查 field.setAccessible(true);//暴力反射 Object o = field.get(p); System.out.println(o); } }