反射_Class对象功能概述与反射_Class对象功能_获取Field
反射_Class对象功能概述
Constructor:构造方法
创建对象;
T newInstance(Object... initargs)
使用由此 Constructor对象表示的构造函数,使用指定的初始化参数来创建和初始化构造函数的声明类的新实例。
如果使用空参数构造方法创建对象,操作可以简化:class对象 newInttance方法
package day01.Demo01_Day017.da; import java.lang.reflect.Constructor; 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 Exception{ //1.获取Person的class对象 Class<Person> personClass = Person.class; /* 2.获取构造方法们 constructor<?>[]getconstructors() constructor<T> getconstructor(类<?>... parameterTypes) constructor<T> getDeclaredconstructor(类<?>... parameterTypes) constructor<?>[getDeclaredconstructors() */ //constructor<?>[]getconstructors() Constructor<?>[] constructors = personClass.getConstructors(); System.out.println(constructors); System.out.println("**************************"); //constructor<T> getconstructor(类<?>... parameterTypes) Constructor<Person> constructor1 = personClass.getConstructor(String.class, int.class); System.out.println(constructor1); //创建对象 Person person1 = constructor1.newInstance("莫凡", 20); System.out.println(person1); System.out.println("**************************"); Constructor<Person> constructor2 = personClass.getConstructor(); System.out.println(constructor2); //创建对象 Person person2 = constructor2.newInstance(); System.out.println(person2); System.out.println("*********************"); Person o = personClass.newInstance(); System.out.println(o); /* 其中构造器方法也是可以完成暴力反射 */ //constructor1.setAccessible(true); } }
反射_Class对象功能_获取Field
Method:方法对象
执行方法:
Object invoke(Object obj, Object... args)在具有指定参数的指定对象上调用此 方法对象表示的基础方法。
获取方法名称
String getName;获取方法名
package day01.Demo01_Day017.da; import java.lang.reflect.Constructor; import java.lang.reflect.Method; /* 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 ReflectDemo3 { public static void main(String[] args) throws Exception{ //1.获取Person的class对象 Class<Person> personClass = Person.class; /* 3.获取成员方法们︰ Method[] getMethods() Method getMethod(string name,类<?>... parameterTypes) Method[] getDeclaredMethods() Method getDeclaredMethod(string name,类<?>... parameterTypes) */ //获取指定名称的方法 Method eat_method1 = personClass.getMethod("eat"); Person p = new Person(); //执行方法 eat_method1.invoke(p); Method eat_method2 = personClass.getMethod("eat", String.class); //执行方法 eat_method2.invoke(p,"九菜一汤"); System.out.println("********************"); //获取所有public修饰的方法 Method[] methods = personClass.getMethods(); for (Method method : methods) { System.out.println(method); String name = method.getName(); System.out.println(name); method.setAccessible(true); } //获取类名 String name = personClass.getName(); System.out.println(name);//day01.Demo01_Day017.da.Person } }