• 反射


    1.、什么是反射
    反射java语言中的一种机制,通过这种机制可以动态的实例化对象、读写属性、调用方法

    2、类类
    所有狗 狗类 Dog 狗对象 旺财

    所有猫 猫类 Cat 猫对象 肥波

    所有类 类类 java.lang.Class 类对象 特定类

    3、反射获取类对象

    1  class.forname("类全路径名");
    2  类名.class
    3  类实例.getclass()  代码如下:

    package com.lingerqi.student;
     /**
      * 获取类对象
      * 1、class.forname("类全路径名");
      * 2、类名.class 
      * 3、类实例.getclass()
      * @author xyls
      *
      */
     public class test {
     
         public static void main(String[] args) throws ClassNotFoundException {
             Class fname = Class.forName("com.lingerqi.student.student");
             Class clz=student.class;
     //        student stu=new student();
     //        Class clz=stu.getClass();
             System.out.println(clz);
         }
     }
    

      

    4、 反射三大作用
    1 实例化对象
    c.newInstance():  代码如下:

    package com.lingerqi.student;
    
    import java.lang.reflect.Constructor;
    
    /**
     * 反射实例化
     * 1、能够实例化未知的类
     * @author xyls
     *
     */
    public class test2 {
    
        public static void main(String[] args) throws Exception {
            Class clz = student.class;
            // student stu=(student)clz.newInstance();
            // 调用一个参数的构造方法创建一个对象
            // Constructor con=clz.getConstructor(String.class);
            // student stu=(student)con.newInstance("s001");
            // 两个参数的构造方法创建对象
            // Constructor con=clz.getConstructor(String.class,String.class);
            // student stu=(student)con.newInstance("s001","zs");
            Constructor con = clz.getDeclaredConstructor(Integer.class);
            con.setAccessible(true);
            student stu = (student) con.newInstance(12);
    
        }
    }
    

      

    2 动态调用方法

    Method m;
    m.invoke

     package com.lingerqi.student;
      
      import java.lang.reflect.Method;
      
      /**
       * 反射调用方法
       * @author xyls
       *
       */
     public class test3 {
     
         public static void main(String[] args)throws Exception {
             student stu=new student();
     //        stu.hello();
             Class clz=stu.getClass();
     //        Method m=clz.getDeclaredMethod("hello");
     //        m.invoke(stu);
             Method m=clz.getDeclaredMethod("add", Integer.class,Integer.class);
             m.setAccessible(true);
             m.invoke(stu, 20,4);
         }
     }
    

      

    3 读写属性

    Field set/get

     package com.lingerqi.student;
     
     import java.lang.reflect.Field;
     
     /**
      * 反射的赋值取值
      * @author xyls
      *
      */
     public class test4 {
     
         public static void main(String[] args)throws Exception {
             student stu=new student();
             Class clz=stu.getClass();
     //        Field field=clz.getDeclaredField("sid");
     //        field.setAccessible(true);
     //        field.set(stu, "s002");
     //        System.out.println(field.get("stu"));
             Field[] fields=clz.getDeclaredFields();
             for (Field field : fields) {
                 field.setAccessible(true);
                 System.out.println(field.getName());
                 
             }
             
                 
         }
     }
    

      

  • 相关阅读:
    P2380狗哥采矿(状态不易设计)
    P2320鬼谷子的钱袋(分治)
    树型背包(模板)
    Tarjan缩点割点(模板)
    最短路记录路径(模板)
    P1790 矩形分割(隐含的电风扇)
    P1725 琪露诺(单调队列优化)
    BZOJ3236: [Ahoi2013]作业
    BZOJ3809: Gty的二逼妹子序列
    BZOJ2190: [SDOI2008]仪仗队
  • 原文地址:https://www.cnblogs.com/omji0030/p/11025033.html
Copyright © 2020-2023  润新知