静态内部类不持有外部类的引用
这个观点是众所周知的。虽然明白是因为其构造函数内没有传入外部类的引用。可是为什么静态类可以没有传入引用呢,静态内部类的加载又是什么样的过程呢?
这几天找到的答案,似乎都不能让我有一种豁然开朗的感觉。于是一次新探索开始了~
一开始,我是这样想的:
静态类和静态对象,静态变量,静态块等等一样,是在类初始化时就被加载的,所以可以不需要传入当前类的引用。
(关于非静态内部类,就不需要多说,一定需要外部类先实例化后才会加载。)
通过网上一个代码的思路,我写出了以下demo:
import java.util.Random;
public class OuterClass {
public static long OUTER_DATE = System.currentTimeMillis();
static {
System.out.println("外部类静态块加载时间:" + System.currentTimeMillis());
}
public OuterClass() {
timeElapsed();
System.out.println("外部类构造函数时间:" + System.currentTimeMillis());
}
static class InnerStaticClass {
public static long INNER_STATIC_DATE = System.currentTimeMillis();
}
class InnerClass {
public long INNER_DATE = 0;
public InnerClass() {
timeElapsed();
INNER_DATE = System.currentTimeMillis();
}
}
public static void main(String[] args) {
OuterClass outer = new OuterClass();
System.out.println("外部类静态变量加载时间:" + outer.OUTER_DATE);