Java 中的反射巩固

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012153184/article/details/82626914

Java 中的反射巩固

反射如何获取类的对象

方法一: 通过内部私有的对象名称获取


         Field field=Unsafe.class.getDeclaredField("theUnsafe");
         //设置可以被访问
         field.setAccessible(true);
         Unsafe  unsafe= (Unsafe) field.get(null);
         System.out.println(unsafe);

方法二: 通过访问私有的构造函数获取

        //  System.out.println(Unsafe.class.getName());
          Class  ca=Class.forName("sun.misc.Unsafe");
          Constructor constructor= ca.getDeclaredConstructor(null);
          constructor.setAccessible(true);
          Unsafe   unsafe1= (Unsafe) constructor.newInstance(null);
          System.out.println(unsafe1);

获取相关的类的信息

            //获取类的所有构造方法信息
            Constructor[] constructor=clazz.getDeclaredConstructors();
            for(Constructor c:constructor){
                System.out.println(c.toString());
            }
        //获取类的所有方法信息
        Method[] method=clazz.getDeclaredMethods();
        for(Method m:method){
            System.out.println(m.toString());
        }
      //获取类的所有成员属性信息
        Field[] field=clazz.getDeclaredFields();
        for(Field f:field){
            System.out.println(f.toString());
        }

遍历对象的属性

         /**
         * 遍历属性
         */
        try {

            for (Field field : fields) {
                System.out.println("数据类型:" + field.getType().getName());
                System.out.println("字段名称 :" + field.getName());
                //属性类型的过滤以及赋值
                if("java.lang.String".equals(field.getType().getName())){
                    /**
                     * 把 private  设置成可访问的 否则会报错
                     * can not access a member of class java_reflect.A with modifiers "private"
                     */
                    field.setAccessible(true);
                    field.set(a, "测试");
                }
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }

猜你喜欢

转载自blog.csdn.net/u012153184/article/details/82626914