博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 反射
阅读量:6504 次
发布时间:2019-06-24

本文共 2772 字,大约阅读时间需要 9 分钟。

前言

        反射是一切框架的基础,当需要在程序运行时获取对象的构造函数、属性、方法时需要用到反射。

 

反射的三种方式

     三种方式比较起来常用第三种

    1.1 Student student=new Student();

          Class clazz=student.getClass();

    1.2  Class clazz=Class.forName("com.zhangfei.Student");

    1.3  Class clazz=Student.class; 

 

反射获取构造函数

      Class clazz=Class.forName("com.zhangfei.Student");            Constructor[] cons=clazz.getConstructors();            System.out.println("获取公共的构造函数=========");            for(Constructor con:cons){                System.out.println(con);            }            System.out.println("获取所有的构造函数,包括共有,私有、受保护的=========");            cons=clazz.getDeclaredConstructors();            for(Constructor con:cons){                System.out.println(con);            }            System.out.println("1、调用公共构造函数创建一个对象========");            Constructor constructor=clazz.getConstructor(null);            Student student=(Student) constructor.newInstance();            System.out.println("2、调用包含一个参数的公共构造函数创建一个对象=========");            constructor=clazz.getConstructor(String.class);            student=(Student)constructor.newInstance("zhangfei");

  

反射获取属性

     Field[] fields=clazz.getFields();            System.out.println("3、获取共有属性=======");            for(Field f:fields){                System.out.println(f);            }            fields=clazz.getDeclaredFields();            System.out.println("4、获取所有属性包括共有、私有、受保护的=======");            for(Field f:fields){                System.out.println(f);            }            System.out.println("5、给私有属性name赋值:=========");            Field field=clazz.getDeclaredField("id");            field.setAccessible(true);            field.set(student,1);            Field field2=clazz.getDeclaredField("name");            field2.setAccessible(true);            field2.set(student,"zhangfei");            Field field3=clazz.getDeclaredField("age");            field3.setAccessible(true);            field3.set(student,30);            System.out.println(student.toString());

  

反射获取方法

       这里获取共有方法时会把继承自object对象的方法也获取到。

 
     System.out.println("6、获取公有方法===============");            Method[] methods=clazz.getMethods();            for(Method method:methods){                System.out.println(method);            }            System.out.println("7、获取所有方法,包括公有、私有、受保护的方法========");            methods=clazz.getDeclaredMethods();            for(Method method:methods){                System.out.println(method);            }            System.out.println("8、调用共有方法并调用=======");            Method method=clazz.getMethod("show1");            method.setAccessible(true);            method.invoke(student);            System.out.println("9、调用受保护的方法并且传参=======");            method=clazz.getDeclaredMethod("show2",String.class);            method.setAccessible(true);            method.invoke(student,"zhangfei");

  

 

转载地址:http://dxmyo.baihongyu.com/

你可能感兴趣的文章
追求绿色数据中心
查看>>
Web开发初学指南
查看>>
OpenStack Days China:华云数据CTO郑军分享OpenStack创新实践
查看>>
探寻光存储没落的真正原因
查看>>
高通64位ARMv8系列服务器芯片商标命名:Centriq
查看>>
中国人工智能学会通讯——融合经济学原理的个性化推荐 1.1 互联网经济系统的基本问题...
查看>>
盘点大数据商业智能的十大戒律
查看>>
戴尔为保护数据安全 推出新款服务器PowerEdge T30
查看>>
今年以来硅晶圆涨幅约达40%
查看>>
构建智能的新一代网络——专访Mellanox市场部副总裁 Gilad Shainer
查看>>
《数字视频和高清:算法和接口》一导读
查看>>
《中国人工智能学会通讯》——6.6 实体消歧技术研究
查看>>
如何在Windows查看端口占用情况及查杀进程
查看>>
云存储应用Upthere获7700万美元股权债务融资
查看>>
国家互联网应急中心何世平博士主题演讲
查看>>
洗茶,你误会了多少年?
查看>>
移动大数据“后市场”受青睐 亟需数据深度学习人才
查看>>
贵阳高新区力争打造“千亿级大数据园区”
查看>>
安防众筹不止于卖产品 思维拓展刺激消费
查看>>
OpenSSH曝高危漏洞 会泄露私钥
查看>>