java 动态获取类实例化_Java:使用反射动态实例化类
使用反射动态实例化类,可以在运行时根据参数实例化不同的类,比如使用简单的工厂模式。
Factory类:
public class Factory {
public static Component getComponent(String componentName) {
try {
Class> componentClass = Class.forName("com.tcpan.es.component." + componentName);
Constructor> constructor = componentClass.getDeclaredConstructor(String.class);
return (Component) constructor.newInstance("hi");
} catch (Exception ex) {
return null;
}
}
}
注意:
Class.forName方法传参必须使用类的全名。如果不带包名的话,是不会实例化当前包下的类。
Constructor> constructor = componentClass.getDeclaredConstructor(String.class);
这个是获取实例化类的构造函数,一个类可能有多个构造函数,必须选择之后newInstance调用的那个。
Class类的工作方式:
1.类名.class 说明: JVM将使用类装载器, 将类装入内存(前提是:类还没有装入内存),不做类的初始化工作.返回Class的对象
2.Class.forName(“类名字符串”) (注:类名字符串是包名+类名) 说明:装入类,并做类的静态初始化,返回Class的对象
3.实例对象.getClass() 说明:对类进行静态初始化、非静态初始化;返回引用运行时真正所指的对象(因为:子对象的引用可能会赋给父对象的引用变量中)所属的类的Class的对象
结论:
我们知道,静态的方法属性初始化,是在加载类的时候初始化。而非静态方法属性初始化,是new类实例对象的时候加载。
因此,这段程序说明,三种方式生成Class对象,其实只有一个Class对象。在生成Class对象的时候,首先判断内存中是否已经加载。
所以,生成Class对象的过程其实是如此的:
当我们编写一个新的java类时,JVM就会帮我们编译成class对象,存放在同名的.class文件中。在运行时,当需要生成这个类的对象,JVM就会检查此类是否已经装载内存中。若是没有装载,则把.class文件装入到内存中。若是装载,则根据class文件生成实例对象。
java 动态获取类实例化_Java:使用反射动态实例化类相关推荐
- java 反射获取修饰符_java之反射和BeanUtils类
反射和BeanUtils类 1. 类的初始化:类什么什么情况下会加载到内存中 只要类加载到内存中,那么类加载器就会为这个类创建一个class文件对象 2. javaBean:数据库中的表和java中的 ...
- java 获取所有实现类_Java动态获取实现某个接口下所有的实现类对象集合
Java动态获取实现某个接口下所有的实现类对象集合 最近有个需求,我需要获取所有同一类型的定时任务的对象,并自动执行. 我想的方案是:直接获取某个接口下面所有的实现类的对象集合,方便以后只需要 实现这 ...
- java 反射获取实体类_Java 通过反射给实体类赋值操作
表单提交这个方法是挺方便的,但在java来说就显得有些麻烦了, 怎么个麻烦呢,就是当你字段多的时候,你就得一个一个的获取其对应的值,这样代码量就多了起来,其代码量不说,维护也是一个问题. 所以就有了这 ...
- java 给对象创建实例_Java中创建(实例化)对象的五种方式
Java中创建(实例化)对象的五种方式1.用new语句创建对象,这是最常见的创建对象的方法. 2.通过工厂方法返回对象,如:String str = String.valueOf(23); 3.运用反 ...
- 在java中获取当前时间_JAVA中获取当前系统时间
一. 获取当前系统时间和日期并格式化输出: import java.util.Date; import java.text.SimpleDateFormat; public class NowStri ...
- java如何获取当天日期_Java 中获取当前时间
一. 获取当前系统时间和日期并格式化输出: import java.util.Date; import java.text.SimpleDateFormat; public class NowStri ...
- java编程获取屏幕分辨率_Java编程获取当前屏幕分辨率的方法示例
本文实例讲述了Java编程获取当前屏幕分辨率的方法.分享给大家供大家参考,具体如下: /** * This class implements the functionality of fetching ...
- java判断对象无数据_java利用反射机制判断对象的属性是否为空以及获取和设置该属性的值...
1.java利用反射机制判断对象的属性是否为空: Map validateMap = new LinkedHashMap(); validateMap.put("serial", ...
- kotlin 反射java类_关于Kotlin反射中实例化类的问题
先上java代码: public class TUtil { public static T getT(Object o, int i) { try { return ((Class) ((Param ...
- java 父类获取子类对象_Java多态性详解 (父类引用子类对象)
面向对象编程有三个特征,即封装.继承和多态. 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据. 继承是为了重用父类代码,同时为实现多态性作准备.那么什么是多 ...
最新文章
- ios 常用数学函数
- 实用:Google Chrome 键盘快捷键大全
- ABAP 选择屏幕上添加按钮,按钮上添加文字和图片
- Python脚本如何生成Windows可执行文件.exe
- MSMQ消息队列安装
- JavaFX 中使用多线程与保证 UI 线程安全
- 北方大学 ACM 多校训练赛 第十五场 欢度6.18
- 使用Apriori进行关联分析(一)
- 第2关:子节点创建、列出、删除
- jquery-ajax请求.NET MVC 后台
- 调度域(Scheduling Domain)
- html播放器滚动字幕,HTML 滚动字幕
- matlab 函数最大值位置,matlab中,两个自变量的函数怎么求最大值(急急急急!!1)...
- 乐理基础:五线谱读谱(1)
- C语言基础级——N维数组定义与使用
- 成就系统工程师的职业生涯
- 2021年数学建模国赛B题优秀论文(Word)(04烯焼制备分析与试验设计)
- java容器doc_java容器组件
- 【FPGA】五、蜂鸣器播放音乐
- 如何在mysql官网下载mysql最新或者以前的版本
热门文章
- 增强迪基-福勒检验(ADF检验、augmented Dickey-Fuller test)是什么?解决了什么问题?
- pandas计算滑动窗口中的最小值实战(Rolling Minimum in a Pandas Column):计算单数据列滑动窗口中的最小值、计算多数据列滑动窗口中的最小值
- R语言ggplot2可视化:箱图(box plot)可视化并且在为箱图的异常值(outlier)添加数据标签
- B树和B+树分别是什么?区别在哪里?MySQL使用的是哪一种树?
- R语言ggplot2可视化抑制(部分)图例(legend)输出实战:抑制颜色图例输出、保留数据点形状图例输出
- 机器学习数据预处理之缺失值:预测填充(回归模型填充、分类模型填充)
- R可视化散点图并进行特殊目标样本点的标记
- 生存分析-从survdiff函数中提取P值
- RACER: Rapid and accurate correction of errors in reads 快速、准确地修正读数中的错误
- 基因组组装(Genome Assembly)