围绕着Class对象和java.lang.reflect类库使用
使用反射需要先获得class类对象
2.反射基础操作
1.获取类对象的四种方式
// 类名.classClass clazz = Person.class;// 对象名.getClass()Class clazz2 = new Person().getClass();// Class.forName("类的全路径名")Class clazz3 = Class.forName("com.example.demo.fashe.Person");// 通过类加载器获取类对象Class clazz4 = Demo02.class.getClassLoader().loadClass("com.example.demo.fashe.Person");
2.基本信息的操作
int modifier = clazz.getModifiers(); //获取类的修饰符Package package= clazz.getPackage(); //获取类的包名String fullClassName = clazz.getName(); //获取类的全路径名称String simpleClassName = clazz.getSimpleName(); //获取类的简单名称ClassLoader classLoader = clazz.getClassLoader(); //获取类的类加载器Class[] interfacesClasses = clazz.getInterfaces(); //获取类实现的接口列表Class fc= clazz.getSuperclass(); //获取类的父类Annotation[] annotations= clazz.getAnnotations(); //获取类的注解列表...
3.类的属性操作
Field[] fields = clazz.getFields(); //获取类中所有的公有字段 包含继承Field[] declaredFields=clazz.getDeclaredFields(); //获取类中定义的字段 内部Field nameField=clazz.getField("name"); //获取指定名称的公有字段Field likeDescField=clazz.getDeclaredField("likeDesc"); //获取指定名称类中定义的字段int modifersFiled = likeDescField.getModifiers(); //获取字段的修饰nameField.setAccessible(true); //指定字段强制访问nameField.set(person,"小皮皮"); //成员字段赋值(需指定对象)descriptionField.set(null,"没有结婚的都是男孩!"); //静态字段赋值....
4.方法的操作
Method[] methods = clazz.getMethods(); //获取类中所有的公有方法 继承Method[] declaredMethods = clazz.getDeclaredMethods(); //获取类中定义的方法Method talkMethod = clazz.getMethod("talk", String.class); //获取类中指定名称和参数的公有方法Method pugMethod = clazz.getDeclaredMethod("pickUpGirls") //获取类中定义指定名称和参数的方法int modifers = pugMethod .getModifiers(); //获取方法的修饰符talkMethod.invoke(boy,"I LOVE SEVEN"); //指定对象进行成员方法的调用pugMethod .setAccessible(true); //指定方法的强制访问pickUpGirlsMethod.invoke(null); //静态方法的调用...
5.构造器的操作
Constructor[] cons = clazz.getConstructors(); //获取类中所有的公有构造器Constructor[] cons = clazz.getDeclaredConstructors(); //获取类中所有的构造器Constructor conNoParam= clazz.getDeclaredConstructor(); //获取类中无参的构造器Constructor con= clazz.getDeclaredConstructor(String.class,String.class); //获取类中有参构造int modifers = con.getModifiers(); //获取构造器的修饰符conNoParam.newInstance(); //构造器实例对象con.setAccessible(true); //指定方法的强制访问con.newInstance('abc','def'); //有参构造调用class.newInstacne(); //class直接调用默认无参构造
