zoukankan      html  css  js  c++  java
  • 通过反射动态创建对象执行方法

    通过反射动态创建对象执行方法

    有了Class对象,能做什么?

    调用指定的方法

    Object invoke方法

    setAccessible

    import java.lang.reflect.Constructor;
    import java.lang.reflect.Field;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    
    //动态的创建对象,通过反射
    public class Test09 {
        public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {
            //获得Class对象
            Class c1 = Class.forName("com.lu.reflection.User");
    
            //构造一个对象
            //User user = (User) c1.newInstance();    //本质上是调用了类的无参构造器
            //System.out.println(user);
    
            //通过构造器创建对象
            //Constructor constructor = c1.getDeclaredConstructor(String.class, int.class, int.class);
            //User use2 = (User) constructor.newInstance("卢", 001, 18);
            //System.out.println(use2);
    
            //通过反射调用普通方法
            User user3 = (User) c1.newInstance();
    
            //通过反射获取一个方法
            Method setName = c1.getDeclaredMethod("setName", String.class);
    
            //invoke : 激活的意思
            //(对象,"方法的值")
            setName.invoke(user3,"小卢");
            System.out.println(user3.getName());
    
            //通过反射操作属性
            System.out.println("99999999999999999999");
            User user4 = (User) c1.newInstance();
            Field name = c1.getDeclaredField("name");
    
            //不能直接操作私有属性,我们需要关闭程序的安全检测,属性或者方法的setAccessible(true).
            name.setAccessible(true); //
    
            name.set(user4,"狂神2");
            System.out.println(user4.getName());
    
        }
    }
    
  • 相关阅读:
    最近迷上用dvd字幕学习英语
    原始套接字
    c语言socket编程
    inet_aton和inet_network和inet_addr三者比较
    用man来查找c函数库
    ubuntu的系统日志配置文件的位置
    复制文件
    vim复制粘贴解密(转)
    vim的自动补齐功能
    两个数据结构ip和tcphdr
  • 原文地址:https://www.cnblogs.com/helloxiaolu/p/13330745.html
Copyright © 2011-2022 走看看