前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java.lang.reflect.Constructor

java.lang.reflect.Constructor

作者头像
allsmallpig
发布2021-02-25 10:32:39
2770
发布2021-02-25 10:32:39
举报
文章被收录于专栏:allsmallpi博客

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

java.lang.reflect.Constructor

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

代码语言:javascript
复制
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反射中需要注意的是:默认构造函数和带参数的构造方法创建实例的区别。

代码语言:javascript
复制
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 }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/01/31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档