Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中加载类的不同方式有哪些_Java_Classloader - Fatal编程技术网

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

在Java中加载类的不同方式有哪些,java,classloader,Java,Classloader,我正在学习java,在学习ClassNotFoundException概念的过程中,我遇到了术语Class.forName(“xyz”)。我知道这是加载类的一种方法。我的问题是,在java中加载类的不同方式是什么?什么时候用哪个?什么是首选的 我将从最简单的开始(这里我假设类定义在类路径中可用,JVM可以加载它): 在代码中引用类名。当JVM找到该引用时,将最新加载该类 SomeClass someInstance = null; ,以加载和初始化该类。它使用当前类的类加载器 Class.

我正在学习java,在学习ClassNotFoundException概念的过程中,我遇到了术语
Class.forName(“xyz”)。我知道这是加载类的一种方法。我的问题是,在java中加载类的不同方式是什么?什么时候用哪个?什么是首选的

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

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

    SomeClass someInstance = null;
    
  • ,以加载和初始化该类。它使用当前类的类加载器

     Class.forName("XYZ");
    
  • ,加载类,但不初始化。您可以获取
    ClassLoader
    的实例,并在该实例上调用
    loadClass()
    ,该实例可以是自定义类加载器或系统类加载器

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

    Class.forName(String name, boolean initialize, ClassLoader loader)
    

  • 对于
    JDBC
    ,我们需要加载驱动程序类并对其进行初始化。在某个地方,驱动程序类通过运行一些静态初始值设定项(尽管我还没有看到内部工作代码)向JDBC驱动程序管理器注册。因此,我们需要使用一种类加载机制,在这种机制中,驱动程序类被加载,并且它的静态初始化块运行。因此,最首选的方法是
    Class.forName()

    可能重复我正在尝试加载JDBC驱动程序。我只是想知道,有多少种方法可以加载一个类?只有一个问题。。。“加载类,但不初始化”的含义是什么。。这意味着没有执行静态初始化?谢谢@据我所知,维克多不应该这样。