java 反射知识浅析

来源:互联网 发布:微视频 软件 编辑:程序博客网 时间:2024/05/16 01:40

测试用的javabean

public class Person {  public String name="孙红华";  private int age=23;  public Person() {    System.out.println("无参构造器");}public Person(String name, int age) { System.out.println("有参构造器");this.name = name;this.age = age;}  public void wash(String name){  System.out.println("wash");  }}

反射的几个基本处理类

public class ReflectClass {public static void main(String[] args) throws Exception {// TODO Auto-generated method stub// 创建无参数的person对象Constructor constructor = Class.forName("com.javabean.Person").getConstructor();constructor.newInstance();Class.forName("com.javabean.Person").newInstance();// 直接创建对象       // 不需要通过构造器// 获取特定的构造器Constructor constructor1 = Class.forName("com.javabean.Person").getConstructor(String.class, int.class);Person person = (Person) constructor1.newInstance("sunhonghua", 12);// 获取变量Person person1 = new Person("孙红华", 23);Field filename = person1.getClass().getField("name");System.out.println("name=" + filename.get(person1));/* * * private的成员变量必须使用getDeclaredField,并setAccessible(true),否则看得到拿不到 暴力反射 */Field fileage = person1.getClass().getDeclaredField("age");fileage.setAccessible(true);System.out.println("age=" + fileage.get(person1));// 获取方法Method[] methods = Class.forName("com.javabean.Person").getMethods();for (Method method : methods) {System.out.println("方法名:" + method);// 可以得到Object的方法 另外注意构造器不是方法}// 调用特定方法 传递参数 方法名和参数类型列表Person person2 = new Person("孙红华", 23);Method washMethod = person2.getClass().getMethod("wash", String.class);washMethod.invoke(person2, "12345");// 调用Person.wash方法}}



0 0
原创粉丝点击