博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java反射中Class.forName和classloader差异对比
阅读量:2429 次
发布时间:2019-05-10

本文共 1769 字,大约阅读时间需要 5 分钟。

1.反射Class.forName和classloader对比

java使用反射时可以通过两种方式实现类加载,class.forName()和classLoader都可用来对类进行加载。那么二者有什么区别吗?

不同点:

1.class.forName()除了将类的.class文件加载到jvm中之外,默认还会对类进行初始化,执行类中的static块。
而classLoader只干一件事情,就是将.class文件加载到jvm中,不会执行static中的内容,只有在newInstance才会去执行static块。

以下是的forName的实现代码:

public static Class
forName(String className) throws ClassNotFoundException {
Class
caller = Reflection.getCallerClass(); return forName0(className, true, ClassLoader.getClassLoader(caller), caller); }

默认是会执行初始化操作的。

2.案例

下面通过代码演示两种加载方式的差异。

package reflect;class LoadTest{
static {
System.out.println("########loadTest########"); } public LoadTest() {
}}public class ClassloaderTest {
public static void main(String[] args) {
String className = "reflect.LoadTest"; System.out.println("以下是测试Classloader的效果:"); testClassloader(className); System.out.println("========================"); System.out.println("以下是测试Class.forName的效果:"); testForName(className); } /** * classloader 加载 * @param className */ private static void testClassloader(String className) {
Class
c; ClassLoader loader = ClassLoader.getSystemClassLoader(); try {
c = loader.loadClass(className); System.out.println("testClassloader: " + c.getName()); } catch (ClassNotFoundException e) {
e.printStackTrace(); } } /** * forName 加载 * @param className */ private static void testForName(String className) {
try {
Class c = Class.forName(className); System.out.println("testForName:" + c.getName()); } catch (Exception e) {
e.printStackTrace(); } }}

运行结果:

以下是测试Classloader的效果:testClassloader: reflect.LoadTest========================以下是测试Class.forName的效果:########loadTest########testForName:reflect.LoadTest

转载地址:http://eecmb.baihongyu.com/

你可能感兴趣的文章
“Java跌落向下,Python奋斗向前”,程序员:看哭了...
查看>>
蜕变!网易轻舟微服务这波操作,始于异构融合、源于中台!
查看>>
Kafka精华问答 | kafka节点之间如何备份?
查看>>
来华30载,这些都是Oracle的神来之笔……
查看>>
Kubernetes要成为一个企业友好平台,到底还缺啥?
查看>>
云数据库精华问答 | 云数据库与其他数据库的关系
查看>>
美国专利机构榜单:华为、京东方进前20名;印度巨头信实与微软结盟;三星发布 1.08 亿像素传感器,小米参与合作……...
查看>>
5G基站功耗,到底有多大?
查看>>
行!这下 CSDN 玩大了!粉丝:太良心
查看>>
Spark精华问答 | 怎么运行Spark?
查看>>
百度积极回应阿波龙项目不实报道;半数开发者认为学习新语言很困难;腾讯在长沙建立首个智慧产业总部……...
查看>>
数据中台与苏秦挂六国相印
查看>>
苹果遭集体诉讼;华为或年底推出鸿蒙系统中低端智能手机;Facebook雇人记录用户语音通话以改善AI技术……...
查看>>
云化要求下,数据库架构如何演进?
查看>>
5G精华问答 | 5G关键技术解读
查看>>
10个业界最流行的Kubernetes发行版
查看>>
微软发布 Azure 物联网安全中心;阿里巴巴在美申请专利,以实现跨区块链统一管理;Google利用足球训练下一代人工智能……...
查看>>
如何证明你不是在开发垃圾?
查看>>
微服务精华问答 | 为什么需要微服务?
查看>>
当我们谈AI时,到底该谈什么?
查看>>