java之反射获取构造方法与成员方法与成员变量

反射获取构造方法与成员方法与成员变量
注意:
获取class对象的方法
通过class对象调用构造方法getConstrutor的方法,返回Constructor对象接收
通过Constructor对象,调用newInstance(+//参数)实例化,使用向下转型接收带参或无参构造
Constructor方法,getName,getConstructor,getDeclaredConstructor可返回私有公有构造方法对象
getConstructors返回公有构造方法对象数组
获取成员方法
通过class对象调用getMethod方法,返回Method对象
通过Method对象调用Invoke(Object+//参数)调用带参或无参成员方法
Method方法,getName,getDeclaredMethod返回成员方法对象
getMethods返回成员对象数组
setAccessiable(true)对私有方法强制调用

  • 使用反射的方式获取成员变量并使用
  • class方法
  • 通过class对象调用
  • getDeclaredField()调用成员变量对象,getDecLaredFields()获取所有成员变量对象数组
  • field方法
  • set(Object)传值
  • setAccessiable(ture)强制反射
/*通过反射获取LC类的成员方法
* */
public class PracticeReMethodDemo {
    public static void main(String[] args) throws Exception {
        /*首先返回class对象
        * 调用构造方法constructor,返回构造方法
        * 调用newInstance()实例化
        * class对象调用method方法,放回成员方法对象
        * 调用invoke()调用方法*/
        /*class对象,三个方法*/
        Class cls = PracticeAbstractLC.class;
        Class cls1 = Class.forName("AutoTestMethod.Practice.Test1111.PracticeAbstractLC");
        Constructor cons = cls.getConstructor();
        PracticeAbstractLC plc = (PracticeAbstractLC) cons.newInstance();
        /*调用method方法
        * getMethod返回方法
        * getDecalemethod返回私有方法
        * getMethods返回公共方法数组*/
        for(Object c:cls.getMethods()){
            System.out.println(c);
        }
        //使用getmethod调用公有方法
        Method method =cls1.getDeclaredMethod("senMsg");//返回方法对象
        method.invoke(plc);
        Method method1 = cls1.getDeclaredMethod("transLC");//无参的公有方法
        method1.invoke(plc);
        //强制反射
        Method method2 = cls1.getDeclaredMethod("sum", int.class, int.class);//带参的私有方法
        method2.setAccessible(true);
        int a = (int) method2.invoke(plc,2,3);
        System.out.println("两者的和是"+a);
    }
}
package AutoTestMethod.Practice.Test1201;
import AutoTestMethod.Practice.Test1111.PracticeAbstractLC;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;

/*
* 使用反射的方式获取成员变量并使用
* class方法
* 通过class对象调用
* getDeclaredField()调用成员变量对象,getDecLaredFields()获取所有成员变量对象数组
* field方法
* set(Object)传值
* setAccessiable(ture)强制反射*/
public class ReflectSetterDemo {
    public static void main(String[] args) throws Exception{
        //返回class对象
        Class cls = Class.forName("AutoTestMethod.Practice.Test1111.PracticeAbstractLC");
        Class stu = student1.class;
        //调用Constructor,返回构造对象
        Constructor cons = stu.getDeclaredConstructor();
        //调用newInstance()返回对象
        student1 plc = (student1) stu.getDeclaredConstructor().newInstance();
        //调用Field,返回变量对象
        //调用set方法,给变量对象赋值
        stu.getDeclaredField("accno").set(plc,"6210000");
        Field field = stu.getDeclaredField("accname");
        field.setAccessible(true);
        field.set(plc,"反射测试");
        System.out.println(plc);
    }
}
public class student1 {
    String  accno;
    private String accname;

    @Override
    public String toString() {
        return accname+accno;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值