Class.forName("Something") 和 Class.forName("Something").newInstance() 之间的区别; [复制

Posted

技术标签:

【中文标题】Class.forName("Something") 和 Class.forName("Something").newInstance() 之间的区别; [复制]【英文标题】:difference between Class.forName("Something") and Class.forName("Something").newInstance(); [duplicate] 【发布时间】:2013-11-07 06:23:45 【问题描述】:

Class.forName("Something");Class.forName("Something").newInstance(); 有什么区别请澄清一下。

【问题讨论】:

明显区别在于newInstance()的调用。那么,您为什么不查看该方法的文档以了解它的作用呢? 【参考方案1】:
Class.forName("Somthing"); 

只在内存中加载类

Class.forName("Somthing").newInstance();

在内存中加载类并创建由加载的Class表示的类的实例。

【讨论】:

超级、简短、精确 @Juned Ahsan 以及为什么我们需要简单地加载类。你能解释一下吗 @subash 在类加载时初始化一些资源,即在类的静态块内。【参考方案2】:

1:如果你只对类的静态块感兴趣,那么只加载类就可以了,并且会执行静态块 那么你只需要

Class.forName("Somthing");

2:如果你对加载类感兴趣,执行它的静态块并且还想访问它的非静态部分,那么你需要一个实例 然后你需要

Class.forName("Somthing").newInstance();

【讨论】:

【参考方案3】:

Class.forName 只是加载类,newInstance 方法调用一个新对象

Class myclass = Class.forName("someClass"); // Load the class
someClass obj = (someClass) myclass.newInstance(); // someClass obj = new someClass()

【讨论】:

以上是关于Class.forName("Something") 和 Class.forName("Something").newInstance() 之间的区别; [复制的主要内容,如果未能解决你的问题,请参考以下文章

JDBC学习2:为什么要写Class.forName("XXX")?

h2 数据库的 ClassNotFound 异常 class.forname("org.h2.Driver")

连接数据库时 Class.forName("oracle.jdbc.driver.OracleDriver") 的实际用途是啥?

Class.forName("com.mysql.jdbc.Driver").newInstance()

Class.forName("com.mysql.jdbc.Driver") 没有在 jar 文件中查找该类

Class.forName(Class) 在特定目录中?