相关疑难解决方法(0)

Class.forName()vs ClassLoader.loadClass() - 用于动态加载?

动态加载类时,何时适合使用

Class.forName("SomeClass");
Run Code Online (Sandbox Code Playgroud)

我应该什么时候使用

ClassLoader.getSystemClassLoader().loadClass("SomeClass");
Run Code Online (Sandbox Code Playgroud)

或者,他们是两种做同样事情的方式吗?

java classloader

98
推荐指数
2
解决办法
7万
查看次数

连接数据库时Class.forName("oracle.jdbc.driver.OracleDriver")的实际用途是什么?

命令是什么

Class.forName("oracle.jdbc.driver.OracleDriver")
Run Code Online (Sandbox Code Playgroud)

连接到Oracle数据库时确实做到了吗?是否有另一种做同样事情的方法?

java jdbc

87
推荐指数
3
解决办法
19万
查看次数

ClassLoader.load(name)和Class.forName(name)之间的区别是什么

可能重复:
使用ClassLoader和Class.forName加载类之间的差异

AFAIK,java中提供了两种方法来从其名称初始化一个类.

  • public static Class forName(String className)抛出ClassNotFoundException

  • public static Class forName(String name,boolean initialize,ClassLoader loader)抛出ClassNotFoundException

  • ClassLoader:

    public class loadClass(String name)throws ClassNotFoundException {return loadClass(name,false); }

已知的是在forName方法中,我们可以将initialize的标志指定为false,这将跳过为该类初始化的一些静态事物.但还有什么呢?我应该如何正确使用它们?

你可以展示一些很好的例子.

谢谢!

更新:

提出问题之后,我做了一些简单的classLoader测试.

ClassLoader cls = ClassLoader.getSystemClassLoader(); 
        Class someClass = cls.loadClass("Test");         
        Class someClass0= Class.forName("Test");        
        Class someClass1= Class.forName("Test",false,cls);


        URL[] urls = new URL[] {new File("bin/").toURL()}; 
        ClassLoader cls2 = new URLClassLoader(urls, null); 
        Class someClass2 = cls2.loadClass("Test");         

        ClassLoader cls3 = new URLClassLoader(urls, cls); 
        Class someClass3 = cls3.loadClass("Test");         

       System.out.println(someClass.equals(someClass0));       
       System.out.println(someClass.equals(someClass1));
       System.out.println(someClass.equals(someClass2)); 
       System.out.println(someClass.equals(someClass3)); …
Run Code Online (Sandbox Code Playgroud)

java classloader

2
推荐指数
1
解决办法
4769
查看次数

标签 统计

java ×3

classloader ×2

jdbc ×1