JAVA代码块执行顺序分析测试

  在实际的工作过程中,几乎从没用过JAVA的代码块。不过既然做了这方面的学习与测试,就索性记录下来防止忘记。同一个招式,圣斗士是不会学习第二遍的...

  首先,上代码:

public class CodeBlockTest {
	
	public CodeBlockTest(){
		//构造函数代码块
		System.out.println("this is construct!");
		
		{
			System.out.println("this is construct code block!");
		}
	}
	
	//静态代码块
	static{
		System.out.println("this is static code block!");
	}
	
	//普通代码块
	{
		System.out.println("this is code block!");
	}
	
	@SuppressWarnings("unused")
	public static void main(String[] args){
		{
			System.out.println("你会不会忽然的出现..?");
		}
		
		CodeBlockTest cbt = null;
		
		{
			System.out.println("在街角的咖啡店..?");
		}
		
		cbt = new CodeBlockTest();
	}
}



直接右键运行,测试结果如下:

this is static code block!
你会不会忽然的出现..?
在街角的咖啡店..?
this is code block!
this is construct!
this is construct code block!


从输出的结果来看,静态代码块应该是在类加载的时候就开始执行,普通代码块则在类实例化之后第一时间执行,之后是构造函数,构造函数代码块。。。

接下来引入子类:

public class SonCodeBlockTest extends CodeBlockTest{
	
	public SonCodeBlockTest(){
		System.out.println("This is son construct!");
	}
	
	static{
		System.out.println("This is son static block!");
	}
	
	@SuppressWarnings("unused")
	public static void main(String[] args){
		SonCodeBlockTest son = new SonCodeBlockTest();
	}

}



右键执行之,结果如下:

this is static code block!
This is son static block!
this is code block!
this is construct!
this is construct code block!
This is son construct!

很明显,由于类的加载顺序,执行顺序是:父类的静态代码块-->子类的静态代码块-->父类的普通代码块-->父类的构造函数-->子类的普通代码块(如果有的话)-->子类的构造函数


你可能感兴趣的:(java,代码块)