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()