反射-Class对象功能获取Constructor以及Method

Class对象功能_获取Constructor

Constructor构造方法:

  创建对象:

    T newInstance(Object… initargs)

    如果使用空参数构造方法创建对象,操作可以简化:Class对象的newInstance方法

复制代码
public class demo03 {
    public static void main(String[] args) throws Exception {
/*
Class对象功能-获取Constructor
Constructor<?>[] getConstructors()
Constructor<T> getConstructor(Class<?>... parameterTypes)

Constructor<?>[] getDeclaredConstructors()
Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
Constructor构造方法
创建对象:
  T newInstance(Object... initargs)
  如果使用空参数构造方法创建对象,操作可以简化:Class对象的newInstance方法
  忽略访问权限修饰符的安全检查 setAccessible(true):暴力反射
 */
        //0.获取Person的Class对象
        Class<Person> personClass = Person.class;
        //1.Constructor<T> getConstructor(Class<?>... parameterTypes)
        Constructor<Person> constructor = personClass.getConstructor(String.class, int.class);//获取构造器
        System.out.println(constructor);
        System.out.println("-----------");
        Constructor<Person> constructor1 = personClass.getConstructor();
        System.out.println(constructor1);
        //创建有参构造对象
        Person person = constructor.newInstance("张三", 23);
        System.out.println(person);
        //创建空构造对象
        Person person2 = personClass.newInstance();
        System.out.println(person2);
    }
}
复制代码

 运行结果:

 

 

Class对象功能-获取Method

Method :方法对象:

  执行方法:

    Object invoke(Object obj,Object... args)

  获取方法名称:

    String getName:获取方法名

复制代码
public class demo_04 {
    public static void main(String[] args) throws Exception {
     Class<Person> personClass = Person.class;
      /*
   Method :方法对象:
  执行方法:
    Object invoke(Object obj,Object... args)
  获取方法名称:
    String getName:获取方法名
      */
        //获取指定名称的方法(无参构造)
        Method eat = personClass.getMethod("eat");
        //创建对象
        Person person = new Person();
        //执行方法
        eat.invoke(person);
        //有参构造
        Method eat1 = personClass.getMethod("eat", String.class);
        eat1.invoke(person, "饭");
        System.out.println("-----------");
        //获取所有public修饰的方法
        Method[] methods = personClass.getMethods();
        for (Method method : methods) {
            System.out.println(method);
            //获取方法名
            String name = method.getName();
            System.out.println(name);
            //忽略访问权限修饰符的安全检查
//            method.setAccessible(true);
        }
        //获取类名
        String className = personClass.getName();
        System.out.println(className);
    }
}
复制代码

运行结果:

 

posted @   monkey大佬  阅读(55)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示