版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第8讲 无用对象回收,要点,简单变量与引用变量 变量的有效期与对象的生存期 无用对象回收,简单变量与引用变量,Java语言的变量分类 简单变量 只有固定的几种类型 字节型、短整型、整型、长整型、单精度浮点数,双精度浮点数、字符型和逻辑型 引用变量 除上面列出之外的其它所有类型 例:字符串、数组、对象等,简单变量与引用变量,简单变量的存储形式 存放的是数值本身 利用赋值语句将变量a赋给变量b时,变量a的值将复制给变量b 定义一个简单变量之后,它立刻有随机的数值,如果直接使用该变量,会得到无法预料的结果 简单变量需要进行初始化,以保证“先赋值,再使用”的原则,b=a;,简单变量与引用变量,引用变量
2、的存储形式 存储的仅仅是一个地址(指针),指针指向实际的对象所在的内存地址 使用前必须初始化,使其指向内存中实际存在的一个对象 用赋值语句将变量a赋给变量b时,对象不会复制,而是直接让b也指向同一个对象,b=a;,简单变量与引用变量,引用变量的初始化 当定义一个引用变量时,它只是空指针,不指向任何地址 例:BoardGame myGame; 用new关键字创建对象时,Java会在内存中分配适当的空间,将新建对象放进该空间 例:new BoardGame();,简单变量与引用变量,引用变量的初始化 用new关键字创建的对象之后,如果不立即用一个变量指向,则对象会丢失。 new关键字应当紧跟在赋值
3、语句后面 例:BoardGame myGame = new BoardGame(); 如果给引用变量赋一个新的对象,系统会新建一个对象,丢弃原先的对象 例:myGame = new BoardGame();,简单变量与引用变量,类成员变量的初始化 简单变量 默认初始化为0(整型、浮点型变量),空值(字符型变量),或false(逻辑变量) 可以直接使用 引用变量 默认初始化为空指针,不指向任何对象 使用前必须先用new关键字进行初始化,变量的有效期与对象的生存期,引用变量与对象的分离 在Java中,引用变量与对象是分开的 通过赋值语句,多个变量可以指向同一对象 存在没有变量的对象,如字符串 存在
4、没有对象的变量,如尚未初始化的变量 变量的有效期对象的生存期,变量的有效期与对象的生存期,引用变量的有效期 从变量定义开始,到变量所处区块结束为止 三类变量的有效期 类变量(类的静态变量) 类的成员变量 函数中的局部变量 有效期长度比较 类变量成员变量局部变量,变量的有效期与对象的生存期,类变量的有效期 类变量的产生:当程序第一次出现类时,不管是否创建了类的实例,都会为类形成一个模板,此时类变量已经在模板中形成,并且自动初始化; 类变量的消失:类变量的有效期直到类消失为止,而一般情况下,除非程序中止,否则类不会消失的。因此类变量的有效期直到程序结束为止。,变量的有效期与对象的生存期,成员变量的
5、有效期 成员变量的产生:从对象生成起。当用new关键字生成一个对象之后,它的成员变量就产生了,并且自动初始化; 成员变量的消失:至对象被回收为止。当对象失去作用,被自动回收之后,成员变量即自动消失;,变量的有效期与对象的生存期,局部变量的有效期 局部变量的产生:从变量定义之处开始。局部变量不会自动初始化,需要手动初始化之后才能使用; 局部变量的消失:到变量所在的区块结束位置为止; 区块的含义:函数中用大括号括起来的部分,不一定是整个函数;,变量的有效期与对象的生存期,局部变量的有效期 public class LocalVarDemo public static void main(Strin
6、g args) String var1 = 局部变量,在整个函数内都有效。; if (true) String var2 = 局部变量,只在if块内有效。; System.out.println(var2); System.out.println(var1); else System.out.println(var2); String var2 = 另一个局部变量,定义在if块之后,因此不会混淆。; System.out.println(var2); System.out.println(var1); ,变量的有效期与对象的生存期,对象的生存期 对象的产生:被new关键字生成开始 对象的消失:
7、直到该对象不能再通过任何变量被访问到为止 只要对象被某个引用变量所指向,不管变量是类变量、成员变量,还是局部变量,对象都会一直生存着,变量的有效期与对象的生存期,对象生存期案例说明 public class ObjLifeDemo public String pubStr1; public String GetStr() String innerStr = GetStr函数内部生成的字符串; return innerStr; public static void main(String args) String outerStr; if (true) ObjLifeDemo aDemo = n
8、ew ObjLifeDemo(); aDemo.pubStr1 = aDemo.GetStr(); System.out.println(aDemo.pubStr1); outerStr = aDemo.pubStr1; System.out.println(outerStr); ,变量的有效期与对象的生存期,对象生存期案例说明 离开if区块之后,aDemo变量的有效期过了,不再有变量指向aDemo对象,因此aDemo对象的生存期也过了,被自动清除 aDemo对象的pubStr1变量消失,但outerStr变量还存在,因此字符串变量依然存在 在if区块外的System.out.println函
9、数中再次显示字符串的内容。,变量的有效期与对象的生存期,对象生存期案例说明 在程序末尾,outerStr变量的有效期结束,再没有变量指向字符串对象,字符串对象的生存期结束,被系统自动回收。 程序执行的结果:,无用对象回收,无用对象回收的机理 当一个对象不再有任何变量指向它时,这个对象不可能再被访问得到,该对象即成为无用对象,列入名单 一旦回收器开始工作,无用对象就会被销毁,回收所占用的内存 避免了内存泄漏问题,改变了编程思想,方便了编程工作,无用对象回收,无用对象回收的机理 无用对象回收需要耗费一定的计算机时间,因此不会随时运行 对象即使已经无用,还可能在内存中存在相当时间 在一个对象被抛弃前
10、,一定要关闭它所附带的功能,包括:关闭打开的文件,关闭打开的数据库连接,抹去屏幕上显示的图形等,无用对象回收,对象的finalize()函数 在对象被销毁时自动调用,用来完成销毁前的最后操作 无法预知对象何时才会被销毁,因此也无法预知对象的finalize函数何时调用 finalize函数的用途:在Java和C+程序混合编程中,如果在C+程序中动态分配内存,则需要在Java对象的finalize函数中调用C+的函数释放该内存,无用对象回收,控制无用对象回收的时间 运行无用对象回收过程会耗费一定的计算机时间,从而降低速度 有时希望在空闲时间运行回收过程,而在紧张计算时间不运行回收过程 通过下面两行指令来运行回收过程: System.runFinal
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学生食品安全教育教案修改版
- 幼儿版反对校园霸凌课件
- oa系统如何选型
- PM模块系统试运行说明
- 2024年包头客运从业资格证报名考试题目
- 2024年江西客运从业资格证考试培训试题和答案
- 2024年男女双方离婚协议书范文
- 2024年员工入职合同书转让协议
- 2024年江西大客车从业资格证考试
- 2024年门市租赁协议合同书
- 2024-2030年中国地铁广告行业市场现状供需分析及投资评估规划分析研究报告
- TBIA 7-2022 骨科疾病诊疗数据集-机器人辅助全膝关节置换
- 职业技术学院《老年心理学基础》课程标准
- 2024至2030年中国医疗卫生行业分析及发展预测报告
- 凤兮凰兮(2022年山东枣庄中考语文试卷记叙文阅读题及答案)
- 现代设施农业技术与应用考核试卷
- 电动飞机推进电机发展及关键技术综述
- 2024-2030年房屋建筑工程行业发展分析及投资战略研究报告
- 2024年秋新华师大版数学七年级上册 1.11.2 科学计数法 教学课件
- 先天性高胰岛素血症
- 2024年中国融通旅业发展集团限公司秋季社会招聘(高频重点提升专题训练)共500题附带答案详解
评论
0/150
提交评论