class中变量初始化顺序取决于变量在类中的定义顺序,所有变量一定会在任何函数执行前先初始化(包括构造函数)
static修饰的变量存放在heap中,静态变量只初始化一次,且static变量在non-static变量前初始化。println与non-static
的执行顺序按在类中的先后顺序执行。
class Bowl{
Bowl(int marker){
System.out.println("Bowl"+marker);
}
void f(int marker){
System.out.println("f"+marker);
}
}
class Table{
static Bowl b1=new Bowl(1);
Table(){
System.out.println("Table()");
b2.f(1);
}
void f2(int marker){
System.out.println("f2"+marker);
}
static Bowl b2=new Bowl(2);
}
class Cupboard{
Bowl b3 = new Bowl(3);
static Bowl b4 = new Bowl(4);
Cupboard(){
System.out.println("Cupboard()");
b4.f(2);
}
void f3(int marker){
System.out.println("f3"+marker);
}
static Bowl b5 = new Bowl(5);
}
public class StaticInitialization{
public static void main (String[] args){
System.out.println("Creating new Cupboard() in main");
new Cupboard();
System.out.println("Creating new Cupboard() in main");
new Cupboard();
t2.f2(1);
t3.f3(1);
}
static Table t2 = new Table();
static Cupboard t3 = new Cupboard();
}
程序运行结果:
Bowl1
Bowl2
Table()
f1
Bowl4
Bowl5
Bowl3
Cupboard()
f2
Creating new Cupboard() in main
Bowl3
Cupboard()
f2
Creating new Cupboard() in main
Bowl3
Cupboard()
f2
f21
f31
本文通过一个具体的Java程序示例,详细解析了类中变量的初始化顺序,特别是静态变量的初始化过程。阐述了static修饰的变量如何在堆内存中进行初始化,并强调了静态变量仅初始化一次的特点。
267

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



