实例块:
实例块,可以写任意个,new对象时,实例块要比构造器先执行,不new对象实例块不会执行。实例块的写法就是在类的括内写一对{ },里面除了方法以外,可以写任意代码,由于不像构造器能传递参数,所以基本日常开发中不会用到实例块。例如:
<a href="https://s3.51cto.com/wyfs02/M00/A7/83/wKioL1nnhS-g5ZzwAAwZC0fTZj8873.png" target="_blank"></a>
因为实例块要比构造器先执行所以先输出“实例块”。
静态块:
静态块,可以写任意个,类被加载的时候就被执行,但是只会被加载一次,不会加载第二次。一个类只要写了静态块,而且有main方法静态块里面有代码的话里面的代码都会进行加载。例如:
<a href="https://s4.51cto.com/wyfs02/M02/A7/83/wKioL1nnhTbhB5itAAsoQKF4A5M138.png" target="_blank"></a>
因为静态块是在类加载的时候就被加载,所以静态块里面的代码也会进行执行。
类什么时候会被加载:
一个类在被new对象、被访问调用方法、被访问静态成员均会促使这个类进行加载。还有就是用Class.forName();来加载类,这个方法是专门用来加载类的。例如:
<a href="https://s5.51cto.com/wyfs02/M01/08/D3/wKiom1nnh_KCsoGUAAvcVLpuJSQ158.png" target="_blank"></a>
如果访问类的常量是不会促使类进行加载的,因为常量层和类的内存不在一块,所以类不会被加载。例如:
<a href="https://s1.51cto.com/wyfs02/M00/A7/83/wKioL1nnhUXy-nfOAA5vlbUVMQg178.png" target="_blank"></a>
<a href="https://s1.51cto.com/wyfs02/M02/08/D3/wKiom1nniACDKEIjAArgxUsL0Oo814.png" target="_blank"></a>
静态块没被加载只调用了常量的值
本文转自 ZeroOne01 51CTO博客,原文链接:http://blog.51cto.com/zero01/1974039,如需转载请自行联系原作者