版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Static 数据的初始化 ( 注意结合代码调试理解 ) : package ;class Bowl Bowl()Bowl(9);Bowl(int marker) Bowl( + marker + );static Bowl b6 = new Bowl(6);static Bowl b9 = new Bowl();void f(int marker) f( + marker + );class Table static Bowl b1 = new Bowl(1);Table() Table();b2.f(1);void f2(int marker) f2( + marker + );stati
2、c Bowl b2 = new Bowl(2);class Cupboard Bowl b3 = new Bowl(3);Bowl b10 = new Bowl();static Bowl b4 = new Bowl(4);Cupboard() Cupboard();b4.f(2);void f3(int marker) f3( + marker + );static Bowl b5 = new Bowl(5);public class StaticInitialization /static Bowl b7 = newBowl(7);/(1)public static void main(S
3、tring args) Creating new Cupboard() in main); new Cupboard();Creating new Cupboard() in main); new Cupboard();/t2.f2(1);/(2)/t3.f3(1);/(3)/static Bowl b8 =new Bowl(8);/(4)/static Table t2new Table();/(5)/static Cupboard t3 = new Cupboard();/(6) /:调试以上代码,总结出以下结论:一、初始化的过程:总体来说顺序为: static 初始化 - 非 stati
4、c 初 始化 - 执行构造函数;二、代码分析一:对现有代码执行结果如下:Creating new Cupboard() in mainBowl(6)Bowl(9)Bowl(4)Bowl(5)Bowl(3)Bowl(9)Cupboard()f(2)Creating new Cupboard() in mainBowl(3)Bowl(9)Cupboard()f(2)执行过程:、 java 解释器寻找 public class 类,加载 StaticInitialization 类;、寻找 StaticInitialization类中的 static 定义代码段;这里因为(1) 、(4) 、(5)
5、、(6) 均加了注释,所以 StaticInitialization 中 没有 static 需要初始化 ;、进入 main 函数中执行代码输出 Creating new Cupboard() in main;、继续执行 new Cupboard(); ,注意初始化的顺序是 static 初始化 - 非 static 初始化 - 执行构造函数; 所以加载类Cupboard 后,首先寻找 Cupboard 类中的 static 代码段 ; 发现 static 段 是: static Bowl b4 = new Bowl(4); static Bowl b5 = new Bowl(5);同时发现有
6、 非 static 段 是: Bowl b3 = new Bowl(3);Bowl b10= new Bowl();按顺序先执行: static Bowl b4 = new Bowl(4); 初始化,因为定 义的是 Bowl 类的实例,所以先 加载 Bowl 类 ,进入 Bowl 类发现又 有 static 代码段 static Bowl b6 = new Bowl(6);static Bowl b9 = new Bowl();然而 我们知道初始化 staticBowl b4 = new Bowl(4);需要调用 Bowl 的构造函数,但调用构造函数之前必须将该类需要初始化的部分先进行初始化,
7、 所以执行到 这里就要先进行 Bowl 类中的 static 代码段的初始化, 之后才能调用 构造函数 Bowl(int marker)为 static Bowl b4 = new Bowl(4);进行初始化。 于是 b6,b9 分别调用构造函数 Bowl(int marker),Bowl(), 输出 Bowl(6) ,Bowl(9) ,完了之后, b4 调用 构造函数 Bowl ( int marker) 输出 Bowl(4) , b4 初始化结束,返 回 Cupboard 类继续执行 ,初始化 b5, 输出 Bowl(5) , 此时 Cupboard 类中 static 部分初始化完, 接
8、下来对非 static 部分初 始化,即对 b3 和 b10 初始化, 一样的方法,加载 Bowl 类,发现 static 字段在上面已经初始化, 所以这里直接调用 Bowl 类的构造函 数,输出 Bowl(3) ,Bowl(9) 。 至此 Cupboard 类中需要初始化 的部分已经初始化完了, 所以放心大胆的 调用 Cupboard 类的构造函数,为 main 函数中代码完成 new Cupboard(); 的实现,输出 Cupboard() ,f(2) 。程序执行返回到 main 函数,输出:Creating new Cupboard() in main, 代码 new Cupboard
9、(); 又一次出现,这里实际上是想演示 static 只会初始化一次 ,而非 static 只要 创建了对象或调用了成员、成员函数, 会进行第二次初始化 ,于是可 以看到输出结果并没有再 输出 Bowl(6) 、Bowl(9) 、 Bowl(4) 、 Bowl(5) ,而是输出:Bowl(3) 、Bowl(9) 、Cupboard() 、f(2) 。 5、取消注释( 1)、( 4 ),发现结果如下: Bowl(6)Bowl(9) Bowl(7) Bowl(8) Creating new Cupboard() in mainBowl(4) Bowl(5) Bowl(3) Bowl(9) Cupb
10、oard() f(2)Creating new Cupboard() in main Bowl(3)Bowl(9)Cupboard()f(2)可以看出输出了 Bowl(7) 、 Bowl(8) ,这说明在 main() 函数执行之 前,程序要先对 StaticInitialization 进行检查,如果有 static 部分, 则先初始化。6、再取消注释( 2)、( 5 )输出结果为:Bowl(6)Bowl(9)Bowl(7)Bowl(8)Bowl(1)Bowl(2)Table()f(1)Creating new Cupboard() in mainBowl(4)Bowl(5)Bowl(3)B
11、owl(9)Cupboard()f(2)Creating new Cupboard() in main7Bowl(3)Bowl(9)Cupboard()f(2)f2(1)在前面的基础上又输出了 Bowl(1) 、 Bowl(2) 、Table() 、 f(1) 。然 而我们看到当没有代码static Table t2 = new Table();的时候 Table 类中的 static 部分没有被初始化,这说明什么?static 初始化只有在必要的时候才会进行。只有在创建了第一个Table 对象之后才会进行初始化。总结如下: 初始化顺序为:加载 public StaticInitializat
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年农村电商物流成本分析模型题库
- 四川省乐山市市中区2026中考适应性数学试卷
- 巢湖市2025届四年级数学第二学期期中调研试题含答案
- 中职护理老年科护理知识课件
- 2026届湖北洪湖市瞿家湾中学十校联考最后物理试题含解析
- 岳阳市君山区2025-2026学年数学三下期中试题(含答案解析)
- 【2025年】广州市越秀区社区工作者招聘考试笔试试题
- 中医护理病历核心要素分析
- 压疮护理中的远程医疗
- 2026届江苏省无锡市梁溪区民办辅仁中学中考物理全真模拟试卷含解析
- 2025陕西烟草专卖局招聘42人易考易错模拟试题(共500题)试卷后附参考答案
- 江苏省医保基金智能监管系统(定点医药机构)用户操作手册
- CJT 486-2015 土壤固化外加剂
- 离婚协议书模板标准电子版分享
- 2023年江苏省无锡市中考政治真题含解析
- 新理性主义完整版本
- 江苏省苏州市2021年中考物理真题试卷(答案+解析)
- GB/T 42430-2023血液、尿液中乙醇、甲醇、正丙醇、丙酮、异丙醇和正丁醇检验
- 钢管规格型号重量对照表
- 饲料原料知识和品控
- GB/T 7582-2004声学听阈与年龄关系的统计分布
评论
0/150
提交评论