Java的反射和内省

1.反射
反射是指在运行过程中,可以获取任意类的属性和方法信息;
对于任意对象,都可以获取调用其任意方法;
这种动态获取类信息和动态调用对象方法的方式称为Java语言的反射机制;

public class ReflectTest {
    public static void main(String[] args) {
        User user = new User();
        try {
            Field nameField = user.getClass().getDeclaredField("name");//获取属性name的对象
            nameField.setAccessible(true);//解除权限检查
            nameField.set(user,"xiaomi");//设置属性值
            String name = (String)nameField.get(user);//获取属性值
            System.out.println(name);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2.内省
标准JavaBean类,属性值的操作是由其get和set方法来操作的;
内省(Introspector)是Java语言对JavaBean类属性、事件的处理方法;
Java提供了一套API来访问某个属性的getter/setter方法,这些API存放在java.beans中;

public class IntrospectorTest {
    public static void main(String[] args) {
        User user = new User();

        try {
            //操作指定属性名称的属性
            PropertyDescriptor pd = null;
            pd = new PropertyDescriptor("name", User.class);
            Method w = pd.getWriteMethod();//获取属性的set方法
            w.invoke(user, "mini");
            Method r = pd.getReadMethod();//获取属性的get方法
            r.invoke(user, null);
            System.out.println(user.toString());

            //操作所有属性
            BeanInfo bi = Introspector.getBeanInfo(User.class);
            PropertyDescriptor[] pds = bi.getPropertyDescriptors();
            for(PropertyDescriptor p : pds){

            }
        } catch (Exception e) {
            e.printStackTrace();
        }


    }
}

你可能感兴趣的:(Java的反射和内省)