• 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");
        }
  • 相关阅读:
    如何写一个bat文件,让他去执行某一个地方的bat文件
    服务器加电自动开机模式设置
    第三章 线程状态
    第二章 线程安全
    第一章 线程
    多线程入门
    异常
    SSO系统介绍
    解决:Nginx访问静态页面出现中文乱码
    错误处理:java.lang.NoClassDefFoundError: javax/jms/JMSContext
  • 原文地址:https://www.cnblogs.com/lzh66/p/13520805.html
Copyright © 2020-2023  润新知