论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
.Net
›
关于静态代码块和匿名代码块以及结构体在程序运行过程中 ...
关于静态代码块和匿名代码块以及结构体在程序运行过程中的调用顺序实验 ...
刘俊凯
金牌会员
|
2023-2-17 14:23:56
|
显示全部楼层
|
阅读模式
楼主
主题
890
|
帖子
890
|
积分
2674
关于静态代码块和匿名代码块以及结构体在程序运行过程中的调用顺序实验
今天学习JAVA看到了static修饰符部分,讲到了有关匿名代码和静态代码部分。此时又突然想到前面所学关于new是调用类的结构体知识,同时结合继承关系,想看看在这些条件下匿名代码块、静态代码块以及类构造体的调用顺序。
编写了三个小文件,代码如下:
Application(带main()执行函数)
Person(父类)
Student(子类)
程序运行结果如下:
首先看第一部分执行结果,对于简单的new且类型与指向相同时,运行结果表明,首先将调用Person的2个代码块,之后再调用类构造体。代码块又以静态代码块优先调用。
第二部分运行结果就很有意思了。当类中出现继承关系时,首先读取Student类时先加载了Student的静态代码。这个可以理解,带有static修饰符的方法和属性在类被调用时也会一并加载。但是实例化过程中,由于继承关系的出现,程序进入Person类中并依次加载了匿名代码块以及类构造体,之后再返回Student类中加载匿名代码块和构造体。因此可以看到,出现继承时会加载父类中的匿名和类构造体,而不会加载静态代码块,即一部分对类的初始设定就不会加载,而仅仅在实例化后读取父类中的方法。
第三部分代码略有不同,"Person student1 = new Student();",此时类型为Person但是实例化调用了Student。此时从结果可以看到,整个运行结果中静态代码块就没出现了,取而代之的是从左边的Person类的匿名代码块-->类构造体再到右边的Student类的匿名代码块-->类构造体。
实验总结:
静态代码在new中是否调用取决于类型和指向是否相同。如果相同,则出现调用,且一定在首位;如果不同则不调用。
如果出现在new中出现继承关系或者类型和指向不一致时,会依次调用父类的匿名代码块、构造体以及子类的匿名代码块和构造体。
后话:
这个东西只是我突发奇想整的,具体能怎么用还有待观察,毕竟菜鸟刚刚入坑。同时,如果父类往上还有继承关系会出现什么情况,有兴趣的可以自己去试试。如果有懂这部分背后原理的大佬可以解释一下,本人感激不尽。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
刘俊凯
金牌会员
这个人很懒什么都没写!
楼主热帖
IDEA中集成Git操作以及关于Git中分支说 ...
牛客SQL刷题第三趴——SQL大厂面试真题 ...
SAP MM 使用两个STO实现免关税跨国公 ...
github上fork2.4k,star8.7k的这款状态 ...
精心总结十三条建议,帮你创建更合适的 ...
MySQL ——select语句 一条龙服务 ...
Linux基础篇(5)---》常用命令大全(压 ...
袋鼠云春季生长大会最新议程来啦!4月2 ...
0day安全:软件漏洞技术分析-Crack小实 ...
哈工大信息安全概论期末复习 ...
标签云
存储
挺好的
服务器
浏览过的版块
Java
快速回复
返回顶部
返回列表