首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Java 类的加载机制(4)

Java 类的加载机制(4)

4、类的加载
类加载有三种方式:

1、命令行启动应用时候由JVM初始化加载
2、通过Class.forName()方法动态加载
3、通过ClassLoader.loadClass()方法动态加载

例子:

package com.neo.classloader;
public class loaderTest {
        public static void main(String[] args) throws ClassNotFoundException {
                ClassLoader loader = HelloWorld.class.getClassLoader();
                System.out.println(loader);
                //使用ClassLoader.loadClass()来加载类,不会执行初始化块
                loader.loadClass("Test2");
                //使用Class.forName()来加载类,默认会执行初始化块
//                Class.forName("Test2");
                //使用Class.forName()来加载类,并指定ClassLoader,初始化时不执行静态块
//                Class.forName("Test2", false, loader);
        }
}

demo类

public class Test2 {
        static {
                System.out.println("静态初始化块执行了!");
        }
}

分别切换加载方式,会有不同的输出结果。
Class.forName()和ClassLoader.loadClass()区别
Class.forName():将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块;
ClassLoader.loadClass():只干一件事情,就是将.class文件加载到jvm中,不会执行static中的内容,只有在newInstance才会去执行static块。

注:
Class.forName(name, initialize, loader)带参函数也可控制是否加载static块。并且只有调用了newInstance()方法采用调用构造函数,创建类的对象 。
返回列表