反射机制

建立实体类 Student  定义String name和 int id,
建立个接口 Entity 

package com.reflic;

        import java.lang.reflect.Constructor;
        import java.lang.reflect.Field;
        import java.lang.reflect.InvocationTargetException;
        import java.lang.reflect.Method;
//反射:1 动态的获得运行时类的信息,类名,接口,属性,方法,构造函数。。。。
//     2 在运行期间动态的创建一个对象
//     3 在运行期间调用对象任意属性和方法
//     4 反射的源头 是 Class,一个Class 的实例对应一个 .class 文件

public class Test {
    public  static  void  main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchFieldException {
        //在运行期间生成一个对象
        //获得Class 对象的方式3 种

        //  Class clazz =  Student.class;
        //  Class clazz = new Student().getClass()

        Class clazz = Class.forName("com.reflic.Student");
        Constructor constructor=  clazz.getConstructor(String.class,int.class);
        Student student =(Student) constructor.newInstance("zhangsan",10);
        System.out.println("name:"+student.getName()+",id:"+student.id);

        //动态的调用对象的属性
        //Field fieldName = clazz.getField("name");
        Field fieldName = clazz.getDeclaredField("name");
        fieldName.setAccessible(true);
        fieldName.set(student,"lisi");     //student.setName("lisi");
        Field fieldId = clazz.getField("id");
        fieldId.set(student,20);            //student.setId(20);
        System.out.println("name:"+student.getName()+",id:"+student.id);

        //动态的调用对象的方法
        Method methodSetName = clazz.getMethod("setName", String.class);
        methodSetName.invoke(student,"wangwu");    //student.setName("wangwu");
        Method  methodSetId =  clazz.getMethod("setId", int.class);
        methodSetId.invoke(student,30);     //student.setId(10);
        System.out.println("name:"+student.getName()+",id:"+student.id);

        //在运行期间动态的获得运行时类的信息:类名,接口名称,属性,方法,构造函数。。。。

        String name = clazz.getName();
        System.out.println("name:"+name);
        Class[] interfaces = clazz.getInterfaces();
        System.out.println("interfaces:"+interfaces[0]);


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值