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();
        }


    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,708评论 0 4
  • 在一个方法内部定义的变量都存储在栈中,当这个函数运行结束后,其对应的栈就会被回收,此时,在其方法体中定义的变量将不...
    Y了个J阅读 4,448评论 1 14
  • 简介 什么是反射 反射(Reflection)是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序...
    Java机械师阅读 814评论 0 5
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,156评论 1 32
  • 课程地址:Java基础之 — 反射(非常重要) (使用的前提条件:必须先得到代表的字节码的Class,Cla...
    叨唧唧的阅读 705评论 0 2