zoukankan      html  css  js  c++  java
  • java.lang.reflect.Constructor

    java.lang.reflect.Constructor

    一、Constructor类是什么
      Constructor是一个类,位于java.lang.reflect包下。
      在Java反射中 Constructor类描述的是 类的构造方法信息,通俗来讲 有一个类如下:

     1 package com.testReflect;
     2 public class ConstructorDemo {
     3     private int num;
     4     private String str;
     5     
     6     public ConstructorDemo(){
     7         num = 2;
     8         str = "xixi";
     9     }
    10     
    11     public ConstructorDemo(int num,String str){
    12         this.num = num;
    13         this.str = str;
    14     }
    15 
    16     @Override
    17     public String toString() {
    18         return "ConstructorDemo [num=" + num + ", str=" + str + "]";
    19     }
    20 }

      在Java反射中ConstructorDemo类中的构造方法ConstructorDemo()、ConstructorDemo(int num,String str)都是Constructor类的实例,这个Constructor类的实例描述了构造方法的全部信息。(包括:方法修饰符、方法名称、参数列表 等等)

    二、如何获取Constructor类对象
      一共有4种方法,全部都在Class类中:
        - getConstructors():获取类中的公共方法
        - getConstructor(Class[] params): 获取类的特定构造方法,params参数指定构造方法的参数类型
        - getDeclaredConstructors(): 获取类中所有的构造方法(public、protected、default、private)
        - getDeclaredConstructor(Class[] params): 获取类的特定构造方法,params参数指定构造方法的参数类型

    三、Constructor类中常用的方法
      对于构造方法,我们就是用来创建类的实例的,但是在Java反射中需要注意的是:默认构造函数和带参数的构造方法创建实例的区别。

     1 package com.testReflect;
     2 
     3 import java.lang.reflect.Constructor;
     4 import java.lang.reflect.Modifier;
     5 
     6 public class ConstructorTest {
     7     public static void main(String[] args) throws Exception {
     8         //使用反射第一步:获取操作类ConstructorDemo所对应的Class对象
     9         Class<?> cls = Class.forName("com.testReflect.ConstructorDemo");
    10         
    11         //获取默认的构造函数
    12         Constructor constructor1 = cls.getConstructor(new Class[]{});
    13         //获取构造函数信息
    14         System.out.println("修饰符: "+Modifier.toString(constructor1.getModifiers()));
    15         System.out.println("构造函数名: "+constructor1.getName());
    16         System.out.println("参数列表: "+constructor1.getParameterTypes());
    17         //通过默认的构造函数创建ConstructorDemo类的实例
    18         Object obj = constructor1.newInstance();
    19         System.out.println("调用默认构造函数生成实例:"+obj.toString());
    20         
    21         System.out.println("===============================================");
    22         
    23         //获取带参数的构造函数
    24         Constructor constructor2 = cls.getConstructor(new Class[]{int.class,String.class});
    25         System.out.println("修饰符: "+Modifier.toString(constructor2.getModifiers()));
    26         System.out.println("构造函数名: "+constructor2.getName());
    27         System.out.println("参数列表: "+constructor2.getParameterTypes());
    28         //获取构造函数信息
    29         //通过带参数的构造函数创建ConstructorDemo类的实例
    30         Object obj2 = constructor2.newInstance(new Object[]{33,"haha"});
    31         System.out.println("调用带参数构造函数生成实例:"+obj2.toString());
    32     }
    33 }
  • 相关阅读:
    非线性方程(组):高维方程解法
    非线性方程(组):一维非线性方程(二)插值迭代方法 [MATLAB]
    非线性方程(组):一维非线性方程(一)二分法、不动点迭代、牛顿法 [MATLAB]
    非线性方程(组):计算基本理论
    常微分方程初值问题:多步预测-修正方法 [MATLAB]
    你会使用super()吗?你确定你了解它吗?
    Django简介
    Web框架的原理
    Django ORM 中的批量操作
    Python的切片
  • 原文地址:https://www.cnblogs.com/xinhuaxuan/p/6019524.html
Copyright © 2011-2022 走看看