![774125bbcf7fc98df12bf4ce0e3d5b55.png](https://img-blog.csdnimg.cn/img_convert/774125bbcf7fc98df12bf4ce0e3d5b55.png)
随着类的加载而执行,只执行一次,用于给类进行初始化。
下图就是执行顺序,先执行StaticCodeDemo中的静态代码块,分别是b,c,(记住,静态代码块是优先于主函数执行的),然后,然后才进主函数之后,先打印haha,然后new StaticCode类的对象,new对象的时候,就加载了StaticCode这个类,然后就执行StaticCode这个类中的静态代码块,记住无论new多少次对象,只执行一次静态代码块,所以这里打印a,然后打印xixi,然后再new 的时候,就不打印a了,因为刚也说了,无论new多少次对象,只执行一次静态代码块,然后执行over.
![4f73a218e78f245185d7457597fa1c96.png](https://img-blog.csdnimg.cn/img_convert/4f73a218e78f245185d7457597fa1c96.png)
然后再升级一下:
![1544f57a508060a834428b1c9dd1bb5b.png](https://img-blog.csdnimg.cn/img_convert/1544f57a508060a834428b1c9dd1bb5b.png)
分析一下这段代码怎么输出?首先肯定是静态输出,先是输出b,然后输出c,由于没有构造Demo类的对象所以Demo的构造代码块不输出,然后进主函数,创建对象传了666的参数,那么就创建了对象,然后看上面那个类,肯定是先走静态代码块,然后再走构造代码块,然后再走有参的构造方法。综合一下输出就是
![80a9df70717cd2d127b1cb90dfecea5a.png](https://img-blog.csdnimg.cn/img_convert/80a9df70717cd2d127b1cb90dfecea5a.png)