关于Java反射机制,深度好文

Class<?> cls = Class.forName("cn.mldn.demo.Person"); // 取得Class对象

传入一个包名+类名的字符串就可以得到Class对象

第一步:获得对象,构造方法,普通方法,属性

Object obj = cls.newInstance() //反射实例化对象
  Constructor<?> cons = cls.getConstructor(String.class, int.class);//获得构造方法
  Method m3 = cls.getDeclaredMethod("getName"); //获得get方法
  Field nameField = cls.getDeclaredField("name"); // 获得name属性
第二步:获得之后---如何用的问题

1.    虽然用此方法创造的对象比new出来的复杂,但是有利于程序的解耦,增加扩展性 

        8/22框架技术都是通过此技术进行解耦操作的
2.      Class<?> cls = Class.forName("cn.mldn.demo.Person"); // 取得Class对象
        Constructor<?> cons = cls.getConstructor(String.class, int.class);
        Object obj = cons.newInstance("张三", 20); // 为构造方法传递参数
        System.out.println(obj); // Person [name=张三, age=20]


3.    Method m = cls.getDeclaredMethod("say");   //say是自己在类中自定义的方法
        m.invoke(obj);//输出123456789,这个obj可以是new出来的或newInstance出来的


4.      Object obj = Class.forName("Person").newInstance();
        Field nameField = cls.getDeclaredField("name"); // 获得name属性
        nameField.setAccessible(true); //解除封装
        nameField.set(obj, "张三"); // Person对象.name = "张三"
        System.out.println(nameField.get(obj)); // Person对象.name


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值