Thinking in Java [Java编程机制] 学习笔记 -- 初始化顺序Order of initialization

本文详细解析了Java中不同类型的变量及代码块的初始化顺序,包括静态数据初始化、显式的静态语句初始化以及非静态实例初始化的过程。强调了静态数据初始化只会在首次创建对象或首次访问静态成员时发生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先

初始化的顺序和变量声明的顺序有关,并且变量(包括primitive types and object reference)的初始化一定是在所有方法被调用之前,甚至constructor也要在此之后。


静态数据初始化 static data initialization

所有的静态数据都存储在一片存储区中,初始化也只会进行一次。初始化顺序是这样的:1.static(如果已经初始化过了,则不会重复初始化)2.non-static
但是书上有一句话是这么讲的"Static data are initialized only when the first XX object is created or the first static access occurs"也就是说,在没用必要初始化static变量时,不会对其初始化,没有必要是指没有创建某个类的对象,或者没有使用Class.staticVariable访问的情况。

显式的静态语句初始化explicit static initialization

语法:
static {
// Clauses...
}
其初始化的顺序和static变量是一样的,只要创建该类对,或者某个访问到该类中某个static变量,显式的静态域中语句便会被触发

非静态实例初始化 non-static instance initialization

语法:
{
clauses...
}
instance initialization总是在构造函数调用之前完成括号内的语句。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值