反射的基本用法

public static void main(String[] args) throws Exception {

        // Demo.class
        // 如何获取字节码文件对象
        // 1.调用.class
        Class clzz1 = Demo.class;
        // 2.调用forName()方法  类名作为参数
        Class clzz2 = Class.forName("com.xxx.反射.Demo");
        // 3.通过对象的getClass()方法来获取
        Demo it = new Demo();
        Class clzz3 = it.getClass();
        System.out.println(clzz1);
        System.out.println(clzz2);
        System.out.println(clzz3);

        // 如何获取属性,以及访问属性
        Field field = clzz1.getDeclaredField("name");
        // 暴力反射
        field.setAccessible(true);
        field.set(it, "jack");
        System.out.println(it.getName());

        Field[] fields = clzz1.getDeclaredFields();

        // 如何获取方法,以及调用方法
        Method method = clzz1.getDeclaredMethod("test", null);
        method.invoke(it, null);

        Method method2 = clzz1.getDeclaredMethod("test2", String.class,int.class);
        method2.invoke(it, "rose",19);

        Method method3=clazz.getDeclaredMethod("test3", null);
        //暴力执行
        method3.setAccessible(true);
        method3.invoke(t1, null);

        // 如何获取构造方法来创建对象
        // 获取空参构造方法,创建对象
        Demo it2 = (Demo)clzz1.newInstance();

        // 获取有参构造方法,创建对象
        Constructor cs = clzz1.getDeclaredConstructor(String.class,int.class);
        Demo it3 = (Demo)cs.newInstance("传智播客",11);
        System.out.println(it3.getName()+"..."+it3.age);

        // 获取Demo类的字节码文件对象
//      Class clzz = Demo.class;
////        Demo it = new Demo();
//      
//      // 获取空参构造方法创建对象
//      Demo it = (Demo)clzz.newInstance();
//      
//      
//      Field[] fields = clzz.getDeclaredFields();
//      for(Field field : fields) {
////            System.out.println(field.getName());
//          if(field.getName().equals("name")) {
//              // 暴力访问
//              field.setAccessible(true);
//              field.set(it, "程序员");
//          }
//      }
//      System.out.println(it.getName());


//      Method[] methods = clzz.getDeclaredMethods();
//      for(Method method : methods) {
//          System.out.println(method.getName());
//          if(method.getName().equals("test")) {
//              System.out.println("说明有这个方法");
//          }
//          if(method.getName().equals("test")) {
//              method.invoke(it, null);
//          }

//          if(method.getName().equals("test2")) {
//              method.invoke(it, "HelloWorld");
//          }
//      }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值