我正在学习java,并且在通过ClassNotFoundException概念的过程中,我遇到了这个术语Class.forName("xyz");.我知道这是加载课程的一种方式.我的问题是,在java中加载类的不同方法有哪些?什么时候使用哪一个?什么比其他更受欢迎?
NIN*_*OOP 11
我将从最简单的开始(这里我假设类定义在类路径中可用,JVM可以加载它):
在代码中引用类名.当JVM找到该引用时,将最新加载该类.
SomeClass someInstance = null;
Run Code Online (Sandbox Code Playgroud)Class.forName(String),用于加载和初始化类.它使用当前类的类加载器.
Class.forName("XYZ");
Run Code Online (Sandbox Code Playgroud)ClassLoader #loadClass(String),用于加载类,但不初始化.您可以在该实例上获取实例ClassLoader并调用它loadClass(),该实例可以是Custom ClassLoader或System ClassLoader.
ClassLoader.getSystemClassLoader().loadClass("XYZ");
Run Code Online (Sandbox Code Playgroud)重载的Class.forName()允许您指定要显式使用的类加载器和initialize参数来指定是否必须初始化类.
Class.forName(String name, boolean initialize, ClassLoader loader)
Run Code Online (Sandbox Code Playgroud)因为JDBC,我们需要加载驱动程序类并初始化它.在某处,驱动程序类通过运行一些静态初始化程序在JDBC驱动程序管理器中注册(尽管我还没有看到内部工作代码).因此,我们需要使用类加载机制,其中驱动程序类被加载并且其静态初始化块运行.因此,最优选的方式是Class.forName().
| 归档时间: |
|
| 查看次数: |
5069 次 |
| 最近记录: |