动态加载类时,什么时候适合使用
Class.forName("SomeClass");
我什么时候应该使用
ClassLoader.getSystemClassLoader().loadClass("SomeClass");
或者,它们是做同一件事的两种方式吗?
他们是完全不同的!
如文档中所述Class.forName(String)
,
使用给定的字符串名称返回与类或接口关联的Class对象。调用此方法等效于:
Class.forName(className, true, currentLoader)
(true
这里指的 是您要初始化该类吗? )
另一方面,ClassLoader.loadClass(String)
:
调用此方法等效于调用
loadClass(name, false)
。
(在这里,布尔值与初始化无关;但是,如果查看loadClass(String,boolean)文档,您会发现它所做的只是加载类,而不是初始化类)。
第一个(Class.forName("SomeClass");
)将:
另一个(ClassLoader.getSystemClassLoader().loadClass("SomeClass");
)将:
假设您正在编码将在诸如Tomcat之类的容器上执行的Web应用程序。Tomcat要做的是为每个Web应用程序创建一个类加载器(以便它可以稍后卸载该Web应用程序并释放内存-
您需要专用的类加载器才能正常工作!)。在这种情况下,您可以看到两个调用将产生完全不同的结果!
有关类加载和初始化的更详细(权威)信息,请查看Java语言规范的最新(第3版)的12.2和12.4节。
问题内容: 在进行简单的JDBC连接时,所有资源都提供相同的代码, 但是我们实际上与“ Class.forName(driver)”无关。我们没有将其存储在任何地方。它的用途是什么,因为我们与Class.forName(driver)的返回无关。 问题答案: 尝试加载命名的类。在早期的JDBC版本中,这是必需的,因为该类要求以这种方式加载该类。多年以来都不需要这样做。 忽略通话,不会发生任何不良情
问题内容: 我查找了语法并搜索了api,但仍然对该过程感到困惑。我还搜索了Stackoverflow。加载类并从中动态创建对象的正确方法是什么?换句话说,我希望用户指定要创建的对象类型,然后创建该类型的对象。我不需要菜单,因为我希望他们能够选择当前目录中的任何类。 问题答案: 假设该类具有无参数构造函数,则最简单的方法是- 参考-java.lang.Class
问题内容: 我正在尝试为我的网站创建页面主题功能。我想使用单独的CSS文件在页面上动态加载相应的主题。 我正在使用此代码: 效果很好,但是如果CSS文件未加载,它不会返回任何信息。 加载时,有什么方法可以捕捉吗?也许通过使用ajax? 问题答案: 加载CSS文件(或其任何其他更改)时,Internet Explorer会触发一个事件。其他浏览器不会触发任何事件,因此您将必须手动检查样式表是否已加载
说明 调用方法: $.f2e.util.getScript(url,cache,fn); 函数说明: 加载js,并提供相关回调 参数说明: 参数名 类型 说明 备注 url string 地址 无 cache boolean 缓存 无 fn function 回调函数 无 脚本 <script> $.f2e.util.getScript(url,true,function(){
问题内容: 以下是2个代码段 第一个使用ClassLoader类加载指定的类 第二个使用Class.forName()加载指定的类 上述方法之间有何区别?哪一个服务于哪个目的? 问题答案: 快速解答(无代码示例) 使用显式方法,您可以灵活地从 不是 默认ClassLoader的ClassLoader中加载类。在你的情况下,你使用的是默认系统类加载器,所以它提供了类似的总体结果(与最终目标的差异的实
问题内容: 我需要使用字符串参数并在Python中创建以该字符串命名的类的对象。在Java中,我会使用。在Python中是否有等同功能? 感谢你的答复。回答那些想知道我在做什么的人:我想使用命令行参数作为类名,并实例化它。我实际上是在Jython中编程并实例化Java类,因此是问题的Java实质。 效果很好。非常感谢。 问题答案: python中的反射比Java中的反射更容易,更灵活。 没有直接函