转载自 https://www.cnblogs.com/xinhuaxuan/p/6019524.html

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 }

java.lang.reflect.Constructor相关推荐

  1. java issynthetic_java.lang.reflect.Constructor.isSynthetic()方法示例

    java.lang.reflect.Constructor.isSynthetic()如果此构造函数是合成构造函数,则返回true; 否则返回false. 声明 以下是java.lang.reflec ...

  2. 自己写一个java.lang.reflect.Proxy代理的实现

    前言 Java设计模式9:代理模式一文中,讲到了动态代理,动态代理里面用到了一个类就是java.lang.reflect.Proxy,这个类是根据代理内容为传入的接口生成代理用的.本文就自己写一个Pr ...

  3. 注解和反射详细笔记。自定义注解,元注解,内置注解。反射机制,Java Reflection,Java内存分析,反射操作注解,java.lang.reflect.Method,Class

    文章目录 注解 什么是注解 内置注解 元注解 自定义注解 反射机制 静态语言 vs 静态语言 Java Reflection 反射相关的主要API Class类 Java内存分析 创建运行时类的对象 ...

  4. Java反射之java.lang.reflect.Method

    前一篇文章讲了Class中的成员变量(java.lang.reflect.Field)的常用使用方式以及其注意事项.我们接着讲Class中的方法(java.lang.reflect.Method). ...

  5. [源码]java.lang.reflect.Proxy

    2019独角兽企业重金招聘Python工程师标准>>> /** %W% %E%** Copyright (c) 2006, Oracle and/or its affiliates. ...

  6. java.lang.reflect.AccessibleObject

    文章目录 一.基本介绍 二.类图(继承体系结构) 三.基本作用 四.常用方法 1)setAccessible(boolean flag) 2)isAccessible() 五.子类 Field 1)类 ...

  7. java.lang.reflect.InaccessibleObjectException: Unable to make

    java.lang.reflect.InaccessibleObjectException: Unable to make ... This exception occurs in a wide va ...

  8. Hadoop中RPC协议小例子报错java.lang.reflect.UndeclaredThrowableException解决方法

    最近在学习传智播客吴超老师的Hadoop视频,里面他在讲解RPC通信原理的过程中给了一个RPC的小例子,但是自己编写的过程中遇到一个小错误,整理如下: log4j:WARN No appenders ...

  9. java.lang.reflect.InvocationTargetException异常

    java.lang.reflect.InvocationTargetException异常 参考文章: (1)java.lang.reflect.InvocationTargetException异常 ...

最新文章

  1. Nature官方劝退读博:全球七成博士对前途迷茫,36%自认有过心理疾病
  2. mpls ***简介
  3. php padright,[扩展推荐] PHP 字符串操作类 Twine
  4. Effective C++ -----条款06:若不想使用编译器自动生成的函数,就该明确拒绝
  5. 自从Python数据可视化出了这个模块后,数据可视化就再简单不过了
  6. win7系统服务器环境配置,win7系统服务器环境配置
  7. 支付宝当前最新版集成2.1.2版本
  8. 金山云和金山办公均成功上市 雷军揭秘背后原因
  9. Java基础复习笔记系列 七 IO操作
  10. 干货|设计师都收藏的9个实用灵感网站!
  11. javascript学习一、js的初步了解
  12. 飘云阁内存补丁工具使用
  13. oracle 12c实例,图解Oracle 12c 触发器实例
  14. matlab如何把正弦转化为余弦公式,余弦和正切的换算关系(正弦余弦正切转换公式大全)...
  15. 使用超级鹰登录12306网站
  16. phpnow mysql_phpnow重新安装mysql数据库的方法
  17. [软件设计] 控制反转(Inversion of Control)随想
  18. 【论文导读】- Cluster-driven Graph Federated Learning over Multiple Domains(聚类驱动的图联邦学习)
  19. matlab 离群值去除方法,数据清洗中异常值(离群值)的判别和处理方法
  20. 数列的操作 div2

热门文章

  1. 7.OD-字符串参考
  2. (四)boost库之正则表达式regex
  3. shell脚本报错:-bash: xxx: /bin/sh^M: bad interpreter: No such file or directory
  4. 面试官问:ZooKeeper是强一致的吗?怎么实现的?
  5. 今天才知道,MySQL 的 binlog 编号可以这么大!
  6. 见良:学习多媒体主要靠实践
  7. 探索多媒体开发最新最佳实践(内附资料下载)
  8. 提速 30%!腾讯TQUIC 网络传输协议
  9. 腾讯技术直播间 | 当感性遇上理性,当魔术遇上数学
  10. 使用docker registry建立私有镜像仓库