如何通过反射创建对象
通过反射创建对象的两种方法:
通过Class字节码对象newInstance();(默认通过无参构造创建)
通过获取构造器getConstructor(Class<?>…parameterTypes);(通过有参的构造器,参数可以指定具体类型和多个数量)
代码:
假设我们有一个用户类User
package test.java.zxj.test_project;public class User {private String userId;private String name;public String getUserId() {return userId;}public void setUserId(String userId) {this.userId = userId;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
此时没有自定义构造参数,只有默认的无参构造;
通过反射可以直接创建对象
package test.java.zxj.test_project;public class TestReflection {public static void main(String[] args) throws Exception {Class<?> clz = Class.forName("test.java.zxj.test_project.User");Object object = clz.newInstance();System.out.println(object instanceof User);}}
打印结果为true;
这种clz.newInstance()的方式,只能创建默认无参构造的对象;
对于有参构造的对象怎么创建呢?
还是这个User,我们加上带参数的构造;
package test.java.zxj.test_project;public class User {private String userId;private String name;public User() {}public User(String userId, String name) {super();this.userId = userId;this.name = name;}public String getUserId() {return userId;}public void setUserId(String userId) {this.userId = userId;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
这时候我们需要通过获取构造器,来创建对象:
package test.java.zxj.test_project;import java.lang.reflect.Constructor;public class TestReflection {public static void main(String[] args) throws Exception {Class<?> clz = Class.forName("test.java.zxj.test_project.User");//获取参数为<String,String>的构造器Constructor<?> constructor = clz.getConstructor(String.class, String.class);Object object = constructor.newInstance("userId_001","name_jack");
// System.out.println(object instanceof User);if (object instanceof User) {User user = (User)object;System.out.println("userId:" + user.getUserId());System.out.println("name:" + user.getName());}}}
可以打印出结果
userId:userId_001
name:name_jack
注意:这里获取构造器只能获取public的,对于私有的需要暴力反射
constructor.setAccessible(true);
如何通过反射创建对象相关推荐
- java 反射创建对象并赋值_java使用反射创建并操作对象的方法
Class 对象可以获得该类里的方法(由 Method 对象表示).构造器(由 Constructor 对象表示).成员变量(由 Field 对象表示),这三个类都位于 java.lang.refle ...
- 通过反射创建对象和调用方法
1.反射创建对象,该对象有一个无参的构造方法 //reflect.User表示User类的全路径 User user = (User) Class.forName("reflect.User ...
- 反射创建对象_面试题汇集——java反射
反射是动态获取信息以及动态调用对象的方法,在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法:并且对于任意一个对象,都能够调用它的任意一个方法. 1.除了使用new创建对象之外,还可以用 ...
- java 反射 对象的方法_java通过反射创建对象并调用方法
这篇文章主要介绍了java通过反射创建对象并调用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.用户类 package com.lf.ent ...
- 通过反射创建对象的几种方式
通过反射创建对象的几种方式 public static void main(String args []) throws Exception {//这个是获得cat类的类对象.Class catcls ...
- Java通过反射创建对象
(转载)http://j2megame.blog.163.com/blog/static/140838396201141623654269/ java可以在运行时动态获取某个类的类信息,这就是java ...
- Java 反射方法的运用(通过反射创建对象)
Java 的反射 涉及到的知识:1.通过反射创建对象:2.通过反射调用某个类的方法. 这篇主要是讲解 通过反射创建对象 一.反射的简单定义:java可以在运行时动态获取某个类的类信息,这就是java的 ...
- 【JavaLearn】(19)反射、Class类、使用反射创建对象-操作属性-执行方法、泛型与反射、反射案例
目录 1. 反射 1.1 反射引入 1.2 反射的入口-Class类 2. 认识 Class 类 3. 使用反射创建对象 4. 使用反射操作属性 5. 使用反射执行方法 6. 使用反射操作泛型 6.2 ...
- 【JavaLearn】#(19)反射、Class类、使用反射创建对象-操作属性-执行方法、泛型与反射、反射案例
1. 反射 1.1 反射引入 编译时,知道类或对象的具体信息,此时直接对类和对象进行操作即可 编译时不知道类或对象的具体信息,只有运行时知道,需要使用反射来实现 ==> 比如驱动的类的名称放在 ...
最新文章
- PHP一些十分严重的缺陷
- 让bug无处藏身,Java 线上问题排查思路、常用工具
- 全网最强Python版《超级玛丽》小游戏,我还是你的马里奥嘛?
- 杂项-Java:JSP
- ubuntu系统写路由指令_在Ubuntu中如何查看网络路由表详解,
- 一个奇怪的问题:tomcat 栈溢出 StackOverflowError错误
- 在IIS上部署.net core的webapi项目 以及502.5错误的两种解决方法
- SQL Server之旅:(二)Could not load the DLL xpstar90.dll
- Python 实用技巧
- Unicdoe【真正的完整码表】对照表(二)汉字Unicode表
- java程序设计基础_陈国君版第五版_第十章习题
- Linux下的经典软件
- 双足机器人Maltab腿部建模,正运动学分析
- K近邻法(KNN)与k-Means的区别
- 【prometheus+alertmanager告警管理】
- 大局观有多重要?如何拥有大局观?
- length和length()的区别
- 图形编辑器:拖拽阻塞优化
- 【解决】Splunk Lookup table owner: nobody
- 地平线开发者社区真心话大冒险,邀你闯关!