Java static代码块在什么时候运行

Tue Apr 28 01:31:11 CST 2015 770 Java

文章摘要常常在一些Java类中看到在方法外的static代码块,那么这些代码块是在什么时候被运行的呢?static代码块的运行时机和static变量初始化的时机一样,都是在类初始化的时候。

看以下Java代码:

package com.chenzuhuang;

class Parents{
	private Temp t1 = new Temp("parents temp1");
	
	{
		System.out.println("parents code block");
	}
	
	static{
		System.out.println("parents static code block1");
	}
	
	private static Temp t2 = new Temp("parents temp2");
}

class Child extends Parents{
	private Temp t1 = new Temp("child temp1");
	
	{
		System.out.println("child code block");
	}
	
	static{
		System.out.println("child static code block1");
	}
	
	private static Temp t2 = new Temp("child temp2");
}

class Temp{
	public Temp(String str){
		System.out.println("Temp被初始化: " + str);
	}
}

public class StaticTest {
	
	public static void main(String[] args) {
		//先后两次创建Chile对象,看看static有没有两次执行
		new Child();
		
		System.out.println("");
		
		new Child();
	}
}



输出结果是

parents static code block1

Temp被初始化: parents temp2

child static code block1

Temp被初始化: child temp2

Temp被初始化: parents temp1

parents code block

Temp被初始化: child temp1

child code block


Temp被初始化: parents temp1

parents code block

Temp被初始化: child temp1

child code block



仔细看一下Java代码以及输出结果,就能发现static代码块的运行时机。

打赏
打赏

分享到: