通过反射来创建对象?getConstructor()和getDeclaredConstructor()区别?
1. 通过类对象调用newInstance()方法,适用于无参构造方法:
例如:String.class.newInstance()
public class Solution {public static void main(String[] args) throws Exception {Solution solution = Solution.class.newInstance();Solution solution2 = solution.getClass().newInstance();Class solutionClass = Class.forName("Solution");Solution solution3 = (Solution) solutionClass.newInstance();System.out.println(solution instanceof Solution); //trueSystem.out.println(solution2 instanceof Solution); //trueSystem.out.println(solution3 instanceof Solution); //true}}
2. 通过类对象的getConstructor()或getDeclaredConstructor()方法获得构造器(Constructor)对象并调用其newInstance()方法创建对象,适用于无参和有参构造方法。
例如:String.class.getConstructor(String.class).newInstance("Hello");
public class Solution {//新建一个类private String str;private int num;public Solution() {}public Solution(String str, int num) {this.str = str;this.num = num;}public Solution(String str) {this.str = str;}public static void main(String[] args) throws Exception {//测试上面的新建类Class[] classes = new Class[] { String.class, int.class };Solution solution = Solution.class.getConstructor(classes).newInstance("hello1", 10);System.out.println(solution.str); // hello1Solution solution2 = solution.getClass().getDeclaredConstructor(String.class).newInstance("hello2");System.out.println(solution2.str); // hello2Solution solution3 = (Solution) Class.forName("Solution").getConstructor().newInstance(); // 无参也可用getConstructor()System.out.println(solution3 instanceof Solution); // true}}
********* getConstructor()和getDeclaredConstructor()区别:*********
getDeclaredConstructor(Class<?>... parameterTypes)
这个方法会返回制定参数类型的所有构造器,包括public的和非public的,当然也包括private的。
getDeclaredConstructors()的返回结果就没有参数类型的过滤了。
再来看getConstructor(Class<?>... parameterTypes)
这个方法返回的是上面那个方法返回结果的子集,只返回制定参数类型访问权限是public的构造器。
getConstructors()的返回结果同样也没有参数类型的过滤。
通过反射来创建对象?getConstructor()和getDeclaredConstructor()区别?相关推荐
- 【反射机制】Java中的反射机制,使用反射机制创建对象、访问属性、方法、构造方法等
这篇文章主要是整理了Java中的反射机制,包括:反射机制概念.反射机制访问构造方法.反射机制访问普通方法.反射机制访问属性,反射机制访问修饰符. 目录 一.反射机制概念 二.反射机制使用 (1)加载C ...
- Java 中使用反射来创建对象、调用方法
Java 中使用反射来创建对象.调用方法 反射创建对象 反射调用方法 反射调用私有方法 反射调用可变参私有方法 反射调用的方法自身可以抛出异常的情形 假设已有下面的类: import java.l ...
- C# 利用反射动态创建对象[摘录]
摘自:http://hi.baidu.com/yangyuhang/blog/item/f12ea90e13f214e336d12250.html 在VS.Net中,有很多种方法动态调用对象的构造函数 ...
- Java反射之创建对象的四种方式
Java反射之创建对象的四种方式 1.使用new关键字 2.使用Java反射机制,反射构造器 3.使用克隆方式创建对象Cloneable 4.使用序列化Serializable 1.使用Java反射机 ...
- 反射动态创建对象_Json为例
1. 取得数据类型Type 方式一:Type.GetType("类型全名"); 适合于类型的名称已知 方式二:obj.GetType(); 适合于类型名未知,类型未知,存在已有对象 ...
- protobuf在java应用中通过反射动态创建对象
2019独角兽企业重金招聘Python工程师标准>>> ---恢复内容开始--- 最近编写一个游戏用到protobuf数据格式进行前后台传输,苦于protobuf接受客户端的数据时是 ...
- protobuf java 自动反射_protobuf在java应用中通过反射动态创建对象
最近编写一个游戏用到protobuf数据格式进行前后台传输,苦于protobuf接受客户端的数据时是需要数据类型的如xxx.parseForm(-),这样就要求服务器在接受客户端请求时必须知道客户端传 ...
- C#中反射和动态关键字有什么区别?
目录 介绍 什么是反射以及我们为什么需要它? 我们如何实现反射? 第1步 第2步 反射的实际用途是什么? Dynamic关键字的用途是什么? Dynamic关键字的实际用途是什么? 反射和Dynami ...
- java 反射getmethod_Java 反射机制中 getMethod()和getDeclaredField()区别
今天在程序中用到java反射机制时,遇到的问题记录一下:我当时遇到的问题是,我用反射getMethod()调用类方法时,发生 NoSuchMethodException异常,后来上网发现getMeth ...
最新文章
- wampsever的mysql密码_WampServer修改Mysql密码的步骤
- 图像亮度、对比度调节(伽马校正)
- 构造matlab决策树分类器,Matlab建立逻辑回归,决策树,SVM,KNN和朴素贝叶斯模型分类绘制ROC曲线...
- matlab中线性规划优化计算方法和实例
- Android中使用AlertDialog实现几种不同的对话框
- 载:看了你能懂几个?
- php mdecrypt generic,mdecrypt_generic
- 看C++文档的小知识
- 支持IE,Firefox的日历控件
- Windows10安装Matlab 2018b教程
- 面经个人向(算法岗)
- js书写原生ajax,JS 原生ajax写法
- svn —— 版本回退
- 「GoTeam 招聘时间」深信服科技 Go 开发工程师(成都)
- 如何提升数据思维能力?
- html字体颜色 html中设置字体颜色代码 字体颜色获取
- 基于SSM中小型企业手机配件销售管理系统
- [跬步]说说如何自主学习
- Google 发布2018年Android平台新政策,终于强硬了一回!
- 小米3升级android 6.0,手机如何升级MIUI 6.0系统?miui升级图文教程