我正在学习java,并且在通过ClassNotFoundException概念的过程中,我遇到了术语Class.forName("xyz");. 我知道这是加载类的一种方式。我的问题是,在java中加载类的不同方法是什么?什么时候用哪一个?什么比其他更受欢迎?
			
			5821 次
		
1 回答
            12        
        
		
我将从最简单的开始(这里我假设类定义在类路径中可用并且 JVM 可以加载它):
- 引用代码中的类名。当 JVM 找到该引用时,该类将被最新加载。 - SomeClass someInstance = null;
- Class.forName(String),加载和初始化类。它使用当前类的类加载器。 - Class.forName("XYZ");
- ClassLoader#loadClass(String),加载类,但不初始化。您可以获取该实例的实例 - ClassLoader并在该实例上调用- loadClass(),可以是自定义类加载器或系统类加载器。- ClassLoader.getSystemClassLoader().loadClass("XYZ");
- 重载Class.forName(),允许您指定要显式使用的类加载器和 - initialize参数来指定是否必须初始化类。- Class.forName(String name, boolean initialize, ClassLoader loader)
对于JDBC,我们需要加载驱动程序类并对其进行初始化。通过运行一些静态初始化程序,驱动程序类在 JDBC 驱动程序管理器中注册(尽管我还没有看到内部工作代码)。因此,我们需要使用类加载机制来加载驱动程序类并运行其静态初始化块。因此,最优选的方式是Class.forName()。
于 2013-04-21T18:28:54.140   回答