java 静态内部类初始化_静态内部类何时初始化

本文探讨了Java中静态内部类的加载和初始化过程,通过实例代码展示了静态内部类并不在外部类加载时初始化,而是首次被调用时加载,并且在加载静态内部类时会先加载外部类。这与非静态内部类的加载机制不同。
摘要由CSDN通过智能技术生成

静态内部类不持有外部类的引用

这个观点是众所周知的。虽然明白是因为其构造函数内没有传入外部类的引用。可是为什么静态类可以没有传入引用呢,静态内部类的加载又是什么样的过程呢?

这几天找到的答案,似乎都不能让我有一种豁然开朗的感觉。于是一次新探索开始了~

一开始,我是这样想的:

静态类和静态对象,静态变量,静态块等等一样,是在类初始化时就被加载的,所以可以不需要传入当前类的引用。

(关于非静态内部类,就不需要多说,一定需要外部类先实例化后才会加载。)

通过网上一个代码的思路,我写出了以下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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值