反射的一些东东

反射

1.  利用 forName() 方法进行 Class 类对象取得, 其最大的特征是可以在类不存在的时候保持程序编译的正确性
     例:
       Class<?> cls = Class.forName("com.zhc.main.Person");


2.  利用 newInstance() 方法可以实例化对象
     例:
       Object obj = cls.newInstance();


3.  使用反射时,类里面必须有一个无参的构造方法.(JAVA 类必须要提供有无参构造)

4.  getName(),会取得完整的类名称(包.类)
    getSimplename(),只取得类名称(没有包名称)

5. Method[] getMethods() 取得全部方法

   Method getMethod(String name,Class<?>... parameterTypes) // 获取公共的方法
   以上的两个方法里面返回的都是 java.lang.reflect.Method
   
   Method getDeclaredMethod("xxx"); // 获取任意的方法(xxx:方法名)

   Method 类里面最重要的方法是:
   invoke(Object obj,Object... args)  调用指定的方法并且 Method 对象的 invoke 是有返回值的,
   它的返回值就是目标方法执行的返回值

   若是私有的方法,必须使用 setAccessible(true) 让该方法可以访问  


   任何方法调用时都必须有实例化对象,而后再设置参数;
 
   在整个 Method 类里面最为重要的操作方法只有一个: invoke(), 这个是可以直接反射调用方法.
 
   反射调用
    一个类必须在有一个实例化对象的情况下才能够调用类中的普通方法

   例:
        Class<?> cls = Class.forName("com.zhc.main.Person");
        Object obj = cls.newInstance(); // 实例化对象
        Method metA = cls.getMethod("setName", String.class); // setName()
        Method metB = cls.getMethod("getName"); // getName()
        metA.invoke(obj, "奔驰狗"); // setter 方法没有返回值
        System.out.println(metB.invoke(obj));













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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值