静态代码块---学会这个就够了
发布日期:2021-06-30 11:37:54 浏览次数:2 分类:技术文章

本文共 2775 字,大约阅读时间需要 9 分钟。

所谓的代码块就是一段独立的代码空间,那什么是静态代码块呢?说白了,静态代码块就是用static修饰的代码块,关于静态代码块的概念不多说,不过你需要知道它的一个特点,那就是

随着类的加载而执行,而且只执行一次

用代码验证静态代码块随着类的加载而执行,且执行一次

class StaticDemo{//静态代码块static {System.out.println("静态代码块被执行");}void show(){System.out.println("方法被执行");}}public class StaticTest {/*** 静态代码块的特点:* 随着类的加载而执行,而且只执行一次*/public static void main(String[] args){new StaticDemo().show();new StaticDemo().show();}

执行结果如下

这里写图片描述

由输出结果我们可以看见,最先被打印的是静态代码块的输出内容,这就说明在加载类的时候是先执行了静态代码块的内容,随后调用了类中的方法,当再次创建实例调用方法的时候只有方法被调用了,而静态代码块不再执行,因此,静态代码块的特点是随着类的加载而执行,而且只执行一次!

####与main函数的执行顺序

其实猜也猜得到静态代码块是先于main函数执行的,不过始终是眼见为实,让我们来用代码验证一下吧!

public class StaticTest {/*** 静态代码块的特点:* 随着类的加载而执行,而且只执行一次* 静态代码块的执行顺序优先于main函数*/static {System.out.println("a");}public static void main(String[] hq){System.out.println("b");}}

我们看执行结果,输出如下

这里写图片描述

代码验证结果依然是静态代码块优先于main函数执行,其实这是必然的,因为静态代码块是随着类的加载而执行。

为了让你我都更明白静态代码块的执行情况,接下来我们来一个稍微复杂点的,我们看看在继承当中的情况,代码如下

class StaticDemo{//静态代码块static {System.out.println("父类静态代码块被执行");}void show(){System.out.println("父类方法被执行");}}public class StaticTest extends StaticDemo {/*** 静态代码块的特点:* 随着类的加载而执行,而且只执行一次* 静态代码块额执行顺序优先于main函数*/static {System.out.println("子类静态代码块被执行");}void show(){System.out.println("子类方法被执行");}public static void main(String[] hq){System.out.println("main函数");StaticTest staticTest = new StaticTest();}}

我们先来看以上代码,你能猜出以上代码的运行结果是什么吗?还是先看下结果吧

这里写图片描述

和你想的一样吗?我们知道静态代码块的加载是随着类的加载而执行,当执行main函数之前,StaticTest这个类被加载,而这个类又是继承自StaticDemo,因此会最先执行StaticDemo中的静态代码块,然后再执行StaticTest中的静态代码块,最后再执行main函数中的输出语句。

接下来我们再加上构造方法和非静态代码块,接下来的代码希望你能经常看看,那么静态代码块这块就足够了。

class StaticDemo{//静态代码块static {System.out.println("父类静态代码块被执行");}//非静态代码块{System.out.println("父类非静态代码块被执行");}//构造方法StaticDemo(){System.out.println("父类构造方法被执行");}}public class StaticTest extends StaticDemo {/*** 静态代码块的特点:* 随着类的加载而执行,而且只执行一次* 静态代码块额执行顺序优先于main函数*/static {System.out.println("子类静态代码块被执行");}//非静态代码块{System.out.println("子类非静态代码块被执行");}StaticTest(){System.out.println("子类构造方法被执行");}public static void main(String[] hq){System.out.println("main函数");new StaticTest();}}

你猜猜以上代码执行之后的输出结果是什么?我们来看最终的运行结果

这里写图片描述

####总结

通过以上输出我们能总结出什么呢?

总结:静态代码块会随着类的加载而执行,而且只执行一次。当new StaticTest()开始执行的时候会先去执行父类中的静态代码块,然后再执行子类中的静态代码块,当所有的静态代码块都执行结束后会执行main函数中的输出语句(前提是输出语句在new StaticTest()之前),然后会去执行父类中的非静态代码块,接着是父类中的构造方法,紧接着执行子类中的非静态代码块,最后是子类中的构造方法,完事!

感谢阅读

大学的时候选择了自学Java,工作了发现吃了计算机基础不好的亏,学历不行这是没办法的事,只能后天弥补,于是在编码之外开启了自己的逆袭之路,不断的学习Java核心知识,深入的研习计算机基础知识,所有心得全部书写成文,整理成有目录的PDF,持续原创,PDF在公众号持续更新,如果你也不甘平庸,那就与我一起在编码之外,不断成长吧!

其实这里不仅有技术,更有那些技术之外的东西,比如,如何做一个精致的程序员,而不是“屌丝”,程序员本身就是高贵的一种存在啊,难道不是吗?

非常欢迎你的加入,未来的日子,编码之外,有你有我,一起做一个人不傻,钱很多,活得久的快乐的程序员吧!

回复关键字“PDF”,获取技术文章合集,已整理好,带有目录,欢迎一起交流技术!

另外回复“庆哥”,看庆哥给你准备的惊喜大礼包,只给首次关注的你哦!

任何问题,可以加庆哥微信:H653836923,另外,我有个交流群,我会***不定期在群里分享学习资源,不定时福利***,感兴趣的可以说下我邀请你!

对了,如果你是个Java小白的话,也可以加我微信,我相信你在学习的过程中一定遇到不少问题,或许我可以帮助你,毕竟我也是过来人了!

在这里插入图片描述

感谢各位大大的阅读🥰

转载地址:https://ithuangqing.blog.csdn.net/article/details/79509638 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:一起看看JDBC中的CURD
下一篇:JDBC异常处理和资源释放问题

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月15日 06时16分23秒