`
xiaobian
  • 浏览: 588205 次
  • 来自: 北京
社区版块
存档分类
最新评论

关于 forName 和 loadClass

阅读更多
关于forName()方法
这个方法总是返回要加载的类的Class类的实例
1、forName(String className)单参数时, initialize=true
    a.总是使用当前类装载器(也就是装载执行forName()请求的类  的类装载器)
    b.总是初始化这个被装载的类(当然也包括:装载、连接、初始化)
2、forName(String className, boolean initialize, ClassLoader loader)
    a.loader指定装载参数类所用的类装载器,如果null则用bootstrp装载器。
    b.initialize=true时,肯定连接,而且初始化了;
    c.false时,绝对不会初始化,但是可能被连接了,但是这里有个例外,如果在调用这个forName()前,已经被初始化了,那么返回的类型也肯定是被初始化的(当然,这里也暗含着:被同一个loader所装载的,而且这个类被初始化了)

关于用户自定义的类装载器的loadClass()方法
1、loadClass(String name)单参数时, resolve=false
    a.如果这个类已经被这个类装载器所装载,那么,返回这个已经被装载的类型的Class的实例,否则,就用这个自定义的类装载器来装载这个class,这时不知道是否被连接。绝对不会被初始化
    b.这时唯一可以保证的是,这个类被装载了。但是不知道这个类是不是被连接和初始化了
2、loadClass(String name, boolean resolve)
    a.resolve=true时,则保证已经装载,而且已经连接了。resolve=falses时,则仅仅是去装载这个类,不关心是否连接了,所以此时可能被连接了,也可能没有被连接

分享到:
评论

相关推荐

    在Java的反射中,Class.forName和Class

    `Class.forName`更方便,它内部调用了`ClassLoader.loadClass`,并且自动处理了类的初始化。而`ClassLoader`提供了更底层的控制,可以用于更复杂的类加载策略,如加载远程类、加密类等。 在使用`Class.forName`时,...

    jdbc中class.forname的作用

    4. 避免仅加载不初始化:值得注意的是,如果只是简单地使用`ClassLoader.loadClass()` 加载类,而没有实例化或执行静态初始化,那么驱动不会被注册到`DriverManager`。这样,即使类被加载到JVM中,也无法通过`...

    jdbc--sqljdbc4-2.0.jar

    at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.Class.forName0...

    Java 类加载机制 ClassLoader Class.forName.pdf

    3. **通过`ClassLoader.loadClass()`方法动态加载**:提供了更多的灵活性,可以根据不同的需求加载不同的类。 这三种方式各有特点,具体选择哪种方式取决于实际的应用场景。 #### 六、总结 Java的类加载机制是JVM...

    Cannot load JDBC driver class 'com.microsoft.sqlserver.jdbc.SQLServerDriver'

    通常,我们使用`Class.forName()`方法来加载驱动,例如: ```java Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); ``` 如果这个方法抛出ClassNotFoundException,表示驱动类没有找到。 4. **...

    dynamic-load-class-parent.zip

    `Class.forName()`方法就是常用的动态加载类的方法,它接受类的全名(包括包名)作为参数,然后返回对应的Class对象。 5. **自定义类加载器(Custom ClassLoader)**: 当标准类加载器不能满足需求时,我们可以编写...

    Load与initalize区别

    3. 反射(如`Class.forName()`)加载类时。 4. 初始化子类时,如果父类尚未初始化,则先初始化父类。 5. 默认Java虚拟机启动时,如果主类(main方法所在的类)没有初始化,那么会初始化主类。 在`initialize`阶段,...

    hive-jdbc-1.1.0-cdh5.4.5-standalone.jar

    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.Class.forName0(Native Method) ...

    hive-jdbc-2.1.0-standalone.jar

    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.Class.forName0(Native Method) ...

    Java 动态加载jar和class文件实例解析

    显示机制是通过使用 java.lang.Class 的 forName() 方法或 java.lang.ClassLoader 的 loadClass() 方法来加载类的。例如,我们可以使用 `Class.forName("MyClass")` 来加载 MyClass 类。 java.lang.Class 的 for...

    java实现静默加载Class示例代码

    除了`loadClass()`方法,还有另一种方式可以实现静默加载,即使用`Class.forName()`的重载版本`forName(String name, boolean initialize, ClassLoader loader)`。这个方法接受一个布尔值参数`initialize`,设置为`...

    jvm 加载class文件

    Class c = urlCL.loadClass("TestClassA"); TestClassA object = (TestClassA) c.newInstance(); object.method(); } } ``` 此示例展示了如何使用`java.net.URLClassLoader`自定义类加载器来加载特定路径下的`...

    在可执行jar中载入第三方jar的几个解决方法

    这个问题通常发生在使用`Class.forName()`或`ClassLoader.getSystemClassLoader().loadClass()`尝试动态加载第三方JAR中的类时。 Java虚拟机(JVM)的类加载机制是导致此问题的关键。自JDK 1.2以来,JVM采用委托...

    Java 全栈知识点问题汇总(5).pdf

    在编程中,我们有时会用到`Class.forName()`和`ClassLoader.loadClass()`这两个方法。`Class.forName()`不仅加载类,还会执行类的静态初始化块,而`ClassLoader.loadClass()`仅加载类,不执行静态初始化。`Class.for...

    JAVA反射机制与类的加载

    - 通过`ClassLoader`的`loadClass`方法。 - 调用静态方法`Class.forName()`。 - 使用`Object`类的`getClass()`方法。 - 使用`.class`表达式直接获取类的`Class`对象。 2. 对于基本数据类型和`void`: - 使用`....

    扫描Class文件的方法

    1. **递归文件系统扫描**:遍历指定目录下的所有文件,通过文件名判断是否为Class文件,然后使用`Class.forName()`或`ClassLoader.loadClass()`加载并检查。 2. **使用ClassLoader资源流**:通过`ClassLoader.get...

    java之反射优化(缓存思路)源码

    return ReflectCache.CLASS_CACHE.computeIfAbsent(className, ReflectCache::loadClass); } private static Class<?> loadClass(String className) { try { return Class.forName(className); } catch ...

    ClassLoader(类加载机制)1

    `Class.forName()`可以初始化类的静态属性和方法,而`ClassLoader.loadClass()`则不会。例如: ```java // 显式加载 Class.forName("com.anbai.sec.classloader.TestHelloWorld"); // 自定义ClassLoader加载 ...

    gilead hibernate lazyload例子

    Gilead,全称为Hibernate for Flex,是用于Flex和Hibernate之间的数据绑定工具,它提供了一种在Flex客户端和Hibernate服务端之间通信的方法,使得Flex应用程序可以利用Hibernate的懒加载功能。然而,由于历史原因,...

Global site tag (gtag.js) - Google Analytics