java static代码块的执行问题

为什么static代码块先执行,然后把数据给faceTexts?
图片说明
图片说明

因为静态代码块是虚拟机加载类的时候执行的而不是在创建对象时执行的

这个是java这个语言就这么规定的,记住好了。

我想“语言就是这么规定的”或许是一个答案,但是这不是一个让你满意的答案。

事实上,Java是人设计的,是人规定的,既然人可以这么规定,那么也可以那么规定。所以为什么静态代码块要规定为先于静态成员初始化?

本质上静态成员初始化是写在静态类型的构造函数中的。而静态构造函数是在这个类被实例化,或者它的静态方法首次被调用的时候才执行。如果一个类,从来没有被调用,那么就不会执行静态构造函数,就算你写了。

这样的机制的好处就是减少了不必要的性能损耗,我们知道Java框架库中有很多静态类型。你写一个hello world的程序,难道需要在程序运行之前先把所有加载的类型的静态成员初始化都跑一次么?显然那样性能太差了。但是众口难调,这样的实现总会让人不满意,比如说,你想写一个类,无论是否被调用,自己都要执行一点什么,这怎么办,自然Java的定义者也想到了这个问题,这才是静态代码块的由来。

http://blog.csdn.net/lihongye_10/article/details/16844543
参看这个,讲解了static块和static变量的关系

static块在虚拟机加载这个类时就可以先执行的