类的加载
- 类的调用,会导致类的加载 - xxx - xxx - 初始化
- 类的初始化,必然先导致父类的,<mark>但是不会导致接口的初始化</mark>
例子:
public class Demo_initial {
public static void main(String[] args) {
System.out.println(A.a);
}
}
class A extends B implements implA{
static {
System.out.println("A static block");
}
public static int a = 10 ;
}
class B {
static{
System.out.println("B static block");
}
}
interface implA{
Thread thread = new Thread() {
{
System.out.println("implA static block in thread");
}
};
}
- 接口的初始化也不会导致父接口的初始化
例子:
public class Demo_initial {
public static void main(String[] args) {
System.out.println(implA.thread.toString());
}
}
interface implA{
Thread thread = new Thread() {
{
System.out.println("implA static block in thread");
}
};
}
interface implB extends implA{
Thread thread = new Thread() {
{
System.out.println("implA static block in thread");
}
};
}
类加载器
逻辑上的继承:
根类加载器
附加类加载器
系统类加载器
应用类加载器(用户主动调用的加载器)
- 参数
-XX:+, 表示开启option选项
-XX:-, 表示关闭option选项
-XX:=, 表示将option选项的值设置为value
- -XX:+TraceClassLoading 用于追踪类的加载信息并打印出来
- -Xms 设置堆的最小空间大小
- -Xmx 设置堆的最大空间大小
- 各种误区
- <mark>static块,在 初始化 时候才执行 对!</mark>(很多网上说在加载时候执行,错!)参考:https://blog.csdn.net/jiese1990/article/details/40154329、https://www.cnblogs.com/ivanfu/archive/2012/02/12/2347817.html