首先
初始化的顺序和变量声明的顺序有关,并且变量(包括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...
// Clauses...
}
其初始化的顺序和static变量是一样的,只要创建该类对,或者某个访问到该类中某个static变量,显式的静态域中语句便会被触发
非静态实例初始化 non-static instance initialization
语法:
{
clauses...
}
instance initialization总是在构造函数调用之前完成括号内的语句。
本文详细解析了Java中不同类型的变量及代码块的初始化顺序,包括静态数据初始化、显式的静态语句初始化以及非静态实例初始化的过程。强调了静态数据初始化只会在首次创建对象或首次访问静态成员时发生。
632

被折叠的 条评论
为什么被折叠?



