在Java中加载类的不同方法有哪些

时间:2013-04-21 18:21:25

标签: java classloader

我正在学习java,并且在通过ClassNotFoundException概念的过程中,我遇到了术语Class.forName("xyz");。我知道这是加载课程的一种方式。我的问题是,在java中加载类的不同方法有哪些?什么时候使用哪一个?什么比其他更受欢迎?

1 个答案:

答案 0 :(得分:11)

我将从最简单的开始(这里我假设类定义在类路径中可用,JVM可以加载它):

  1. 在代码中引用类名。当JVM找到该引用时,该类将被最新加载。

    SomeClass someInstance = null;
    
  2. Class.forName(String),加载并初始化类。它使用当前类的类加载器。

     Class.forName("XYZ");
    
  3. ClassLoader#loadClass(String),加载类,但不初始化。您可以获取ClassLoader的实例并在该实例上调用loadClass(),该实例可以是Custom ClassLoader或System ClassLoader。

    ClassLoader.getSystemClassLoader().loadClass("XYZ");
    
  4. 重载Class.forName() ,允许您指定要显式使用的类加载器和initialize参数来指定是否必须初始化类。

    Class.forName(String name, boolean initialize, ClassLoader loader)
    
  5. 对于JDBC,我们需要加载驱动程序类并初始化它。在某处,驱动程序类通过运行一些静态初始化程序在JDBC驱动程序管理器中注册(尽管我还没有看到内部工作代码)。因此,我们需要使用类加载机制,其中驱动程序类被加载并且其静态初始化块运行。因此,最优选的方式是Class.forName()