zoukankan      html  css  js  c++  java
  • java反射

    获取Class对象的三种方式

    1.对象的getClass方法

    2.类的class属性

    3.class.forName("类的路径")方法

    ReflectDemo demo  = new ReflectDemo();
            Class ReflectClass = demo.getClass();
            System.out.println(ReflectClass.getName());
            Class ReflectClass2 = ReflectDemo.class;
            System.out.println(ReflectClass2.getName());
            System.out.println(ReflectClass2 == ReflectClass);
            Class ReflectClass3 = null;
            try {
                ReflectClass3 = Class.forName("reflect.ReflectDemo");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            System.out.println(ReflectClass == ReflectClass3);

    获取构造函数

    Class<?> reflect = Class.forName("reflect.ReflectConstructor");
            Constructor[] array = reflect.getConstructors(); //获取所有非私有构造函数
            for (Constructor c : array){
                System.out.println(c);
            }
            System.out.println("-----------");
            Constructor[] array2 = reflect.getDeclaredConstructors();//获取所有构造函数(包括私有构造)
            for (Constructor c : array2){
                System.out.println(c);
            }
            System.out.println("-------------");
            Constructor<?> constructor = reflect.getConstructor(String.class);//获取单个特定的非私有构造函数
            Constructor constructor1 = reflect.getDeclaredConstructor(int.class);
            //获取单个特定的构造函数
          ReflectConstructor reflectConstructor = (ReflectConstructor) constructor.newInstance("abc");
            constructor1.setAccessible(true);
            constructor1.newInstance(2);
        }

     获取属性

     ReflectField obj = new ReflectField();
            Class clazz = Class.forName("reflect.ReflectField");
    
            Field[] fields = clazz.getFields(); //获取所有非私有的属性
            for(Field field : fields){
                System.out.println(field);
            }
            System.out.println("-------------------");
            fields = clazz.getDeclaredFields();//获取所有属性(包括私有属性)
            for(Field field : fields){
                System.out.println(field);
            }
    
            Field field = clazz.getField("info");//根据属性名获取特定的非私有属性
            field.set(obj,"张三");
    
            field = clazz.getDeclaredField("str");//根据属性名获取特定的所有属性
            field.setAccessible(true);
            field.set(obj,"李四");
    
            System.out.println(obj);

    获取方法

    public static void main(String[] args) throws Exception {
            ReflectMethod obj = new ReflectMethod();
            Class clazz = Class.forName("reflect.ReflectMethod");
            Method[] methods = clazz.getMethods();//获取所有非私有方法,包括继承自父类的方法
            for(Method m : methods){
                System.out.println(m);
            }
            System.out.println("-------------");
            methods = clazz.getDeclaredMethods();//获取所有的方法
            for(Method m : methods){
                System.out.println(m);
            }
            System.out.println("------------");
    
            Method method = clazz.getMethod("method", String.class, String.class);
            method.invoke(obj,"work","succ");
            System.out.println("---------");
            method = clazz.getDeclaredMethod("method", String.class);
            method.setAccessible(true);
            method.invoke(obj,"ibetter");
        }
  • 相关阅读:
    3.5---用栈实现队列(CC150)
    3.3---集合栈(CC150)
    3.2---最小栈(CC150)
    3.1---一个数组实现三个栈(CC150)
    2.7---判断链表是否是回文(CC150)
    SpringCloud实战5-Feign声明式服务调用
    Spring Cloud(二):服务注册与发现 Eureka【Finchley 版】
    Spring Cloud Eureka 自我保护机制
    Spring Cloud Edgware新特性之七:可选的EnableDiscoveryClient注解
    Spring Cloud 声明式服务调用 Feign
  • 原文地址:https://www.cnblogs.com/lzh66/p/13520805.html
Copyright © 2011-2022 走看看