静态域的初始化

package com.cisco.learning;

class Test {

static Object object = new Object();

static{
System.out.println("12");
}

//静态域或静态代码块只加载一次

}

public class TestStatic {

public static void main(String[] args) {

/*12
java.lang.Object@14384c2
java.lang.Object@14384c2
java.lang.Object@14384c2
java.lang.Object@14384c2
java.lang.Object@14384c2*/

System.out.println(Test.object);

Test testOne = new Test();
System.out.println(testOne.object);
Test testTwo = new Test();

System.out.println(testOne.object);
System.out.println(testTwo.object);

}

}

### Java 静态内部类的初始化顺序 当加载外部类时,并不会立即加载静态内部类。只有在程序首次访问该静态内部类中的成员或创建其实例时才会触发其加载和初始化过程[^1]。 对于静态变量,在静态内部类被加载时会按照声明顺序依次执行初始化操作;而对于静态代码块,则会在所有静态变量之后被执行,同样遵循定义先后次序。如果存在多个静态代码块,那么它们也会依照出现的位置由上至下运行[^2]。 需要注意的是,即使父级类已经完成加载并处于就绪状态,子级别的静态组件仍然要等到真正需要用到的时候才去启动相应的准备流程[^3]。 ```java public class OuterClass { static class StaticInnerClass { static int value = initializeValue(); private static int initializeValue() { System.out.println("Static inner class initialized"); return 0; } static { System.out.println("Static block of static inner class executed"); } } public static void main(String[] args) { // This will trigger the loading and initialization of `StaticInnerClass`. System.out.println(OuterClass.StaticInnerClass.value); } } ``` 上述例子展示了如何通过调用静态字段来触发展开整个静态内部类的初始化逻辑。控制台输出表明了具体发生的事件及其顺序: - 输出 "Static inner class initialized" - 接着显示 "Static block of static inner class executed" 这证明了静态域先于静态初始器被执行的事实。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值