public T newInstance(Object... initargs)
使用空参数构造方法创建对象
通过反射的构造方法创建对象(initargs-传入对象的属性值)
public void setAccessible(boolean flag)。
通过私有构造方法创建对象是 取消语法检查不报错(flag->true)
public Field[] getFields()
获取所有公共的成员变量 包含从父类继承过来的
public Field[] getDeclaredFields()
获取所有的成员变量 包含私有的 也包含从父类继承过来的成员变量
public Field getField(String name)
获取单个指定名称name的公共成员变量 不包含私有的
public Field getDeclaredField(String name)
获取单个指定名称的成员变量 包含私有的
public Object get(Object obj)
获取值 传入创建的对象
public void set(Object obj, Object value)
设置值 传入创建的对象及其设置的值
publicclassMyTest{publicstaticvoidmain(String[] args)throwsNoSuchFieldException{Class<Student> studentClass =Student.class;System.out.println("获取public修饰的所有成员变量");Field[] fields = studentClass.getFields();for(Field field : fields){System.out.println(field);}/*public java.lang.String org.反射.获取成员变量.Student.name
public int org.反射.获取成员变量.Student.age*/System.out.println("=======================================");System.out.println("获取所有的成员变量");Field[] declaredFields = studentClass.getDeclaredFields();for(Field declaredField : declaredFields){System.out.println(declaredField);}/*public java.lang.String org.反射.获取成员变量.Student.name
public int org.反射.获取成员变量.Student.age
private java.lang.String org.反射.获取成员变量.Student.school*/System.out.println("=======================================");System.out.println("通过指定的成员变量名称 获取public修饰单个成员变量");Field field = studentClass.getField("name");System.out.println(field);//public java.lang.String org.反射.获取成员变量.Student.name
field = studentClass.getField("age");System.out.println(field);//public int org.反射.获取成员变量.Student.ageSystem.out.println("=======================================");System.out.println("通过指定的成员变量名称 获取任意类型修饰单个成员变量");
field = studentClass.getDeclaredField("school");System.out.println(field);//private java.lang.String org.反射.获取成员变量.Student.school}}publicclassMyTest02{publicstaticvoidmain(String[] args)throwsNoSuchMethodException,IllegalAccessException,InvocationTargetException,InstantiationException,NoSuchFieldException{Class<Student> studentClass =Student.class;Constructor<Student> constructor = studentClass.getConstructor();Student student = constructor.newInstance();//设置值Field field = studentClass.getField("name");
field.set(student,"张三");System.out.println(student);//Student{name='张三', age=0, school='null'}//获取值String name =(String) field.get(student);System.out.println(name);//张三}}
反射获取成员方法
public Method[] getMethods()
获取所有的公共的成员方法 不包含私有的 包含父类继承过来的公共方法
public Method[] getDeclaredMethods()
获取所有的成员方法 包含私有的
public Method getMethod(String name,Class<?>... parameterTypes)
获取单个的成员方法 不包含私有的
传入方法名,参数类型
public Method getDeclaredMethod(String name,Class<?>... parameterTypes)
获取单个的成员方法 包含私有的
public Object invoke(Object obj, Object... args)
执行方法 传入对象名 参数
publicclassMyTest{publicstaticvoidmain(String[] args)throwsNoSuchMethodException{Class<Student> studentClass =Student.class;System.out.println("获取所有的public的成员方法");Method[] methods = studentClass.getMethods();for(Method method : methods){System.out.println(method);}/*public void org.反射.获取成员方法.Student.show(java.lang.String,int)
public static void org.反射.获取成员方法.Student.ok()
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
......... */System.out.println("===============================");System.out.println("获取所有的的成员方法");
methods = studentClass.getDeclaredMethods();for(Method method : methods){System.out.println(method);}/*public void org.反射.获取成员方法.Student.show(java.lang.String,int)
public static void org.反射.获取成员方法.Student.ok()
private int org.反射.获取成员方法.Student.haha(int)*/System.out.println("===============================");System.out.println("获取public单个的成员方法");Method method = studentClass.getMethod("show",String.class,int.class);System.out.println(method);//public void org.反射.获取成员方法.Student.show(java.lang.String,int)
method = studentClass.getMethod("ok");System.out.println(method);//public static void org.反射.获取成员方法.Student.ok()System.out.println("===============================");System.out.println("获取单个的成员方法");
method = studentClass.getDeclaredMethod("haha",int.class);System.out.println(method);//private int org.反射.获取成员方法.Student.haha(int)}}publicclassMyTest02{publicstaticvoidmain(String[] args)throwsNoSuchMethodException,IllegalAccessException,InvocationTargetException,InstantiationException{Class<Student> studentClass =Student.class;Constructor<Student> constructor = studentClass.getConstructor();Student student = constructor.newInstance();Method method = studentClass.getMethod("show",String.class,int.class);//public void show(String name, int age) { System.out.println(name + " " + age); }Object jack = method.invoke(student,"jack",18);
method = studentClass.getDeclaredMethod("haha",int.class);//private int haha(int age) { return 100; }
method.setAccessible(true);Object invoke = method.invoke(student,85);System.out.println(invoke);}}