LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 174|回复: 0

Java - Constructor类及其用法

[复制链接]
发表于 2023-12-17 23:08:44 | 显示全部楼层 |阅读模式

Constructor类及其用法
Constructor类存在于反射包(java.lang.reflect)中,反映的是Class 对象所表示的类的构造方法。

下面看一个简单例子来了解Constructor对象的使用:

  1. public class ConstructionTest implements Serializable {
  2.     public static void main(String[] args) throws Exception {

  3.         Class<?> clazz = null;

  4.         //获取Class对象的引用
  5.         clazz = Class.forName("com.example.javabase.User");

  6.         //第一种方法,实例化默认构造方法,User必须无参构造函数,否则将抛异常
  7.         User user = (User) clazz.newInstance();
  8.         user.setAge(20);
  9.         user.setName("Jack");
  10.         System.out.println(user);

  11.         System.out.println("--------------------------------------------");

  12.         //获取带String参数的public构造函数
  13.         Constructor cs1 =clazz.getConstructor(String.class);
  14.         //创建User
  15.         User user1= (User) cs1.newInstance("hiway");
  16.         user1.setAge(22);
  17.         System.out.println("user1:"+user1.toString());

  18.         System.out.println("--------------------------------------------");

  19.         //取得指定带int和String参数构造函数,该方法是私有构造private
  20.         Constructor cs2=clazz.getDeclaredConstructor(int.class,String.class);
  21.         //由于是private必须设置可访问
  22.         cs2.setAccessible(true);
  23.         //创建user对象
  24.         User user2= (User) cs2.newInstance(25,"hiway2");
  25.         System.out.println("user2:"+user2.toString());

  26.         System.out.println("--------------------------------------------");

  27.         //获取所有构造包含private
  28.         Constructor<?> cons[] = clazz.getDeclaredConstructors();
  29.         // 查看每个构造方法需要的参数
  30.         for (int i = 0; i < cons.length; i++) {
  31.             //获取构造函数参数类型
  32.             Class<?> clazzs[] = cons[i].getParameterTypes();
  33.             System.out.println("构造函数["+i+"]:"+cons[i].toString() );
  34.             System.out.print("参数类型["+i+"]:(");
  35.             for (int j = 0; j < clazzs.length; j++) {
  36.                 if (j == clazzs.length - 1)
  37.                     System.out.print(clazzs[j].getName());
  38.                 else
  39.                     System.out.print(clazzs[j].getName() + ",");
  40.             }
  41.             System.out.println(")");
  42.         }
  43.     }
  44. }


  45. class User {
  46.     private int age;
  47.     private String name;
  48.     public User() {
  49.         super();
  50.     }
  51.     public User(String name) {
  52.         super();
  53.         this.name = name;
  54.     }

  55.     /**
  56.      * 私有构造
  57.      * @param age
  58.      * @param name
  59.      */
  60.     private User(int age, String name) {
  61.         super();
  62.         this.age = age;
  63.         this.name = name;
  64.     }

  65.     public int getAge() {
  66.         return age;
  67.     }

  68.     public void setAge(int age) {
  69.         this.age = age;
  70.     }

  71.     public String getName() {
  72.         return name;
  73.     }

  74.     public void setName(String name) {
  75.         this.name = name;
  76.     }

  77.     @Override
  78.     public String toString() {
  79.         return "User{" +
  80.                 "age=" + age +
  81.                 ", name='" + name + '\'' +
  82.                 '}';
  83.     }
  84. }
  85. 输出结果[/i][/i]
  86. [i][i]/* output
  87. User{age=20, name='Jack'}
  88. --------------------------------------------
  89. user1:User{age=22, name='hiway'}
  90. --------------------------------------------
  91. user2:User{age=25, name='hiway2'}
  92. --------------------------------------------
  93. 构造函数[0]:private com.example.javabase.User(int,java.lang.String)
  94. 参数类型[0]:(int,java.lang.String)
  95. 构造函数[1]:public com.example.javabase.User(java.lang.String)
  96. 参数类型[1]:(java.lang.String)
  97. 构造函数[2]:public com.example.javabase.User()
  98. 参数类型[2]:()[/i][/i]
复制代码

------

原文链接:https://pdai.tech/md/java/basic/java-basic-x-reflection.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表