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

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

    public class Test09 {
        public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {
            //获得Class对象
            Class c1 = Class.forName("com.xu.reflection.User");
    
            //构造一个对象
            //User user = (User)c1.newInstance();//本质是调用类的无参构造
            //System.out.println(user);
    
            //通过构造器创造对象
            //Constructor constructor = c1.getDeclaredConstructor(int.class, String.class, int.class);
            //User user1 = (User) constructor.newInstance(001, "泥人", 18);
            //System.out.println(user1);
    
            //通过反射调用普通方法
            User user2 = (User)c1.newInstance();
            //通过反射获取一个方法
            Method setName = c1.getDeclaredMethod("setName", String.class);
            //invoke:激活的意思
            //(对象,"方法的值")
            setName.invoke(user2,"泥人");
            System.out.println(user2.getName());
            System.out.println("76777777777777");
            User user3 = (User)c1.newInstance();
            Field name = c1.getDeclaredField("name");
    
            //不能直接操作私有属性,我们需要关闭程序的安全检测setAccessible(true)
            name.setAccessible(true);
            name.set(user3,"泥人a");
            System.out.println(user3.getName());
        }
    }
    

    总结:

    1. 通过Class对象.newInstance()是调用的对象的无参构造,要是该对象没有无参构造,就不能创造对象;
    2. 通过Class对象先去获取构造方法,再通过构造方法.newInstance(传入对应的参数)可以走有参构造和无参构造;
    3. 通过反射获取的方法可以通过方法名.invoke(对象,""参数"")的方式来激活使用;
    4. 通过反射获取的属性,如果private修饰不能直接操作,需要先关闭程序的安全检测name.setAccessible(true).
    刚刚参加工作,很有很多不懂不会的,发现错误,欢迎指正,谢谢!
  • 相关阅读:
    【摄影】EOS 6D通过WIFI连接手机
    【Teradata SQL】dayofyear与td_day_of_year函数区别
    【PS技巧】如何修人物的脸型
    【Teradata数据保护机制】锁
    【数据库】SQL标准定义的四个事务隔离级别
    【TD函数】Teradata正则表达式函数
    Teradata复杂视图跨库访问权限问题
    CPU芯片组与总线
    单核CPU、多个CPU(路)、超线程技术、多核CPU(物理核、逻辑核)
    Idea删除当前类所有的注释
  • 原文地址:https://www.cnblogs.com/xd-study/p/13211938.html
Copyright © 2011-2022 走看看