静态代码块、非静态代码块、构造函数的执行顺序_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 静态代码块、非静态代码块、构造函数的执行顺序

静态代码块、非静态代码块、构造函数的执行顺序

 2013/8/30 1:09:17  lee123lee123  程序员俱乐部  我要评论(0)
  • 摘要:publicclassExA{static{System.out.println("父类--静态代码块");}publicExA(){System.out.println("父类--构造函数");}{System.out.println("父类--非静态代码块");}publicstaticvoidmain(String[]args){newExB();}}classExBextendsExA{static{System.out.println("子类--静态代码块");}{System
  • 标签:构造函数 函数 构造 代码 执行
class="java" name="code">

public class ExA {
	static {
		System.out.println("父类--静态代码块");
	}

	public ExA() {
		System.out.println("父类--构造函数");
	}

	{
		System.out.println("父类--非静态代码块");
	}

	public static void main(String[] args) {
		new ExB();
	}
}

class ExB extends ExA {
	static {
		System.out.println("子类--静态代码块");
	}
	{
		System.out.println("子类--非静态代码块");
	}

	public ExB() {
		System.out.println("子类--构造函数");
	}
}



执行结果  
=====  
父类--静态代码块  
子类--静态代码块  
父类--非静态代码块  
父类--构造函数  
子类--非静态代码块  
子类--构造函数  

可是静态代码块真的会一定在非静态代码块之前执行吗?  
下面这段代码 


public class ExA {
	private static ExA a = new ExA();
	static {
		System.out.println("父类--静态代码块");
	}

	public ExA() {
		System.out.println("父类--构造函数");
	}

	{
		System.out.println("父类--非静态代码块");
	}

	public static void main(String[] args) {
		new ExB();
	}
}

class ExB extends ExA {
	private static ExB b = new ExB();
	static {
		System.out.println("子类--静态代码块");
	}
	{
		System.out.println("子类--非静态代码块");
	}

	public ExB() {
		System.out.println("子类--构造函数");
	}
}


执行结果 

=====  
父类--非静态代码块  
父类--构造函数  
父类--静态代码块  
父类--非静态代码块  
父类--构造函数  
子类--非静态代码块  
子类--构造函数  
子类--静态代码块  
父类--非静态代码块  
父类--构造函数  
子类--非静态代码块  
子类--构造函数  
=====  
可以发现非静态代码块并不是一定在静态代码块之后执行的。  
我认为此时private static ExA a = new ExA()是静态变量。而java里面静态变量与静态代码块是按代码先后顺序执行。所以就导致非静态代码块在静态代码块之前执行。 
上一篇: JAVA 中的四种解析XML方式 下一篇: JNI例子
发表评论
用户名: 匿名