zoukankan      html  css  js  c++  java
  • Java 反射机制:(九)获取运行时类的构造器结构

    一、获取构造器结构

      1、getConstructors()

        getConstructors():获取当前运行时类中声明为public的构造器

        Demo:

     1    @Test
     2     public void test1() {
     3 
     4         Class clazz = Person.class;
     5         //getConstructors():获取当前运行时类中声明为public的构造器
     6         Constructor[] constructors = clazz.getConstructors();
     7         for (Constructor c : constructors) {
     8             System.out.println(c);
     9         }
    10     }

        运行结果:

        

      2、getDeclaredConstructors()

        getDeclaredConstructors():获取当前运行时类中声明的所有的构造器

        Demo:

     1     @Test
     2     public void test2() {
     3 
     4         Class clazz = Person.class;
     5         //getDeclaredConstructors():获取当前运行时类中声明的所有的构造器
     6         Constructor[] declaredConstructors = clazz.getDeclaredConstructors();
     7         for(Constructor c : declaredConstructors){
     8             System.out.println(c);
     9         }
    10     }

        运行结果:

        

      3、getConstructor(类<?> ..., parameterTypes)

        getConstructor():根据构造方法参数类型获取当前运行时类中指定的 public 修饰的构造器

        Demo:

    1     @Test
    2     public void test11() throws NoSuchMethodException {
    3 
    4         Class clazz = Person.class;
    5         //getConstructor():获取当前运行时类中所有的public修饰的构造器
    6         Constructor constructor = clazz.getConstructor();
    7         System.out.println(constructor);
    8     }

      4、getDeclaredConstructor()

        getDeclaredConstructor():根据参数类型获取当前运行时类中指定的构造器(忽略权限修饰符)

        Demo:

    1     @Test
    2     public void test11() throws NoSuchMethodException {
    3 
    4         Class clazz = Person.class;
    5         //getDeclaredConstructor():获取当前运行时类中指定的构造器
    6         Constructor constructor = clazz.getDeclaredConstructor(String.class);
    7         System.out.println(constructor);
    8     }

    二、关于构造器

        说明:

          ① 构造器名称无需指定,因为它和类名一致;

          ② parameterTypes 参数是 Class 对象的一个数组,它按声明顺序标识构造方法的形参类型。

          ③ 如果此 Class 对象表示非静态上下文中声明的内部类,则形参类型作为第一个参数包括显示封闭的实例;

        Demo:

     1 public class TestConstructor{
     2     @Test
     3     public void test7() throws Exception{
     4         Class<?> clazz = Outer.class;
     5         Constructor<?> constructor = clazz.getDeclaredConstructor();
     6         System.out.println(constructor);//无参构造
     7         
     8         Class<?> c = Outer.Inner.class;
     9         //因为Inner是非静态的内部类,所以它的构造器,默认第一个形参是外部类的实例对象
    10         Constructor<?> cs = c.getDeclaredConstructor(Outer.class);
    11         System.out.println(cs);
    12     }
    13 }
    14 class Outer{
    15     class Inner{
    16         
    17     }
    18 }

        Demo2:

     1     @Test
     2     public void test8(){
     3         Class<?> clazz = String.class;
     4         Constructor<?>[] constructors = clazz.getConstructors();
     5         for (Constructor<?> constructor : constructors) {
     6             int mod = constructor.getModifiers();                         //获取构造器修饰符
     7             String name = constructor.getName();                          //获取构造器名字
     8             Class<?>[] parameterTypes = constructor.getParameterTypes();  //获取构造器参数列表
     9             System.out.print(Modifier.toString(mod)+"	" + name + "(");
    10             System.out.println(Arrays.toString(parameterTypes)+")");
    11         }
    12     }

    三、

  • 相关阅读:
    自我学习——javascript——基本技巧
    Edge Code CC卡死原因
    Django中ORM介绍和字段及字段参数
    Web框架本质及第一个Django实例
    Python连接MySQL数据库之pymysql模块使用
    Bootstrap框架
    jQuery快速入门
    前端基础之BOM和DOM
    前端基础之JavaScript
    前端基础之CSS
  • 原文地址:https://www.cnblogs.com/niujifei/p/14887441.html
Copyright © 2011-2022 走看看