在Java中加载类的不同方式有哪些
我正在学习java,在学习ClassNotFoundException概念的过程中,我遇到了术语在Java中加载类的不同方式有哪些,java,classloader,Java,Classloader,我正在学习java,在学习ClassNotFoundException概念的过程中,我遇到了术语Class.forName(“xyz”)。我知道这是加载类的一种方法。我的问题是,在java中加载类的不同方式是什么?什么时候用哪个?什么是首选的 我将从最简单的开始(这里我假设类定义在类路径中可用,JVM可以加载它): 在代码中引用类名。当JVM找到该引用时,将最新加载该类 SomeClass someInstance = null; ,以加载和初始化该类。它使用当前类的类加载器 Class.
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驱动程序。我只是想知道,有多少种方法可以加载一个类?只有一个问题。。。“加载类,但不初始化”的含义是什么。。这意味着没有执行静态初始化?谢谢@据我所知,维克多不应该这样。