2019独角兽企业重金招聘Python工程师标准>>>
在实际的工作过程中几乎从没用过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!
很明显由于类的加载顺序执行顺序是父类的静态代码块-->子类的静态代码块-->父类的普通代码块-->父类的构造函数-->子类的普通代码块如果有的话-->子类的构造函数
转:https://my.oschina.net/GameKing/blog/186799