`
yuyiming1986
  • 浏览: 62099 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

类的初始化顺序

阅读更多
类的初始化顺序

1.对于同一个类中的静态变量,静态初始化块,变量,构造块,构造函数,它们的初始化顺序依次是(静态变量,静态块),(变量,构造块),构造函数。

  测试代码:

class Test{
	
	private static String staticVar = "静态变量";
	private String memberVar = "成员变量";
		
	static{
		System.out.println(staticVar);
		System.out.println("静态块");
	}
	
	{
		System.out.println(memberVar);
		System.out.println("构造块");
		
	}
	
	public Test(){
		System.out.println("构造函数");
	}
		
}

public class Main {
	
	public static void main(String[] args) {
		Test c = new Test();
	}
}


输出:

静态变量
静态块
成员变量
构造块
构造函数

2.静态块只会执行一次,而构造块在每次创建新对象的时候都会执行。


3.而在继承关系下,初始顺序为:父类的(静态变量,静态块),子类的(静态变量,静态块),父类的(成员变量,构造块),父类的构造函数,子类的(成员变量,构造块),子类的构造函数。

测试代码:

class Parent{
	
	private static String pstaticVar = "Parent静态变量";
	private String pmemberVar = "Parent成员变量";
		
	static{
		System.out.println(pstaticVar);
		System.out.println("Parent静态块");
	}
	
	{
		System.out.println(pmemberVar);
		System.out.println("Parent构造块");	
	}
	
	public Parent(){
		System.out.println("Parent构造函数");
	}
}

class Child extends Parent{
	
	private static String cstaticVar = "Child静态变量";
	private String cmemberVar = "Child成员变量";
		
	static{
		System.out.println(cstaticVar);
		System.out.println("Child静态块");
	}
	
	{
		System.out.println(cmemberVar);
		System.out.println("Child构造块");
		
	}
	
	public Child(){
		System.out.println("Child构造函数");
	}
		
}

public class Main {
	
	public static void main(String[] args) {
		Child c = new Child();
	}
}


输出:

Parent静态块
Child静态变量
Child静态块
Parent成员变量
Parent构造块
Parent构造函数
Child成员变量
Child构造块
Child构造函数


4.而静态变量与静态块的初始化顺序是由两者在类中的声明先后顺序决定的.

测试代码:
class A{
	
	public A(){
		System.out.println("A构造函数");
	}
}

class Test{
	
	private static A staticVar = new A();
	
	static{	
		System.out.println("静态块");
	}	
}

public class Main {
	
	public static void main(String[] args) {
		Test c = new Test();
	}
}


输出:
A构造函数
静态块

如果交换private static A staticVar = new A();
        static{
System.out.println("静态块");
        }两者的位置

输出:
静态块
A构造函数
分享到:
评论
1 楼 Branding 2011-11-19  

!!!

相关推荐

Global site tag (gtag.js) - Google Analytics