java 类加载顺序

时间:2020-12-29 17:34:42
package fly4j.test;

import flytool.common.file.FileTool;
import java.net.URL;

/**
* 启动
* Created by sff on 2017/6/18.
*/
public class Startup {
public static String dd = "sff";
public static void main(String args[]) throws Exception {
URL baseUrl = FileTool.jarFile(Startup.class).getParentFile().getParentFile().toURI().toURL();
startup(baseUrl);
}

private static void startup(URL baseUrl) throws Exception{
dd = "gggggggg";
TestStaci.ss();
}
}


package fly4j.test;

/**
* Created by sff on 2017/7/18.
*/
public class TestStaci {
static {
System.out.println(Startup.dd);
}

private String name = "ff";

public static void ss(){
System.out.println("end");
}
}

运行结果:

java 类加载顺序


类加载顺序是:先加载Startup类,因为第一步要执行main函数。在加载main函数之前先加载Startup的dd成员变量。然后加载main函数。接下来加载startup方法。再加载FileTool类,再运行到dd = "gggggg".这段代码运行完之后,才会加载TestStaci类,TestStaci类中先加载static{}, 再加载ss(), 最后加载name成员变量。



类加载分为两部分,类加载顺序是编译顺序决定的,类加载进去之后才会加载它内部的static 和非static,类内部是先加载static的