尚学堂【官网】-西安Java培训|c++培训|Android培训|安卓培训|java视频教程|软件工程师|-西安雁塔尚学堂计算机学校
Java教程  尚学堂首页Java学院Java教程

尚学堂Java基础类的加载

www.xasxt.com 发布人:java  |  来自:本站  |  发布时间:2017-10-26 11:03:31  |  点击次数:1193

类加载有三种方式:

1、命令行启动应用时候由JVM初始化加载

2、通过Class.forName()方法动态加载

3、通过ClassLoader.loadClass()方法动态加载

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
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类

1
2
3
4
5
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()方法采用调用构造函数,创建类的对象 。

 

当前文:尚学堂Java基础类的加载
上一页:西安Java培训队列线程安全操作
下一页:尚学堂Java的JVM初始化步骤
在线报名(*为必填项)