`
凌紫冥
  • 浏览: 25616 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java编程思想第四版——第十四天

    博客分类:
  • Java
 
阅读更多
2012-04-19
118-121/913

Java编程思想第四版——第十四天

5.4.1 在构造器中调用构造器
为一个类写了多个构造器,有时想在一个构造器中调用另一个构造器,以避免重复代码,可用this关键字做到这一点。
通常写this的时候,都是指这个对象或者当前对象,而且它本身表示对当前对象的引用。在构造器中,如果为this添加了参数列表,就有了不同的含义,这将产生对符合此参数列表的某个构造器的明确调用,这样,调用其他构造器就有了直接的途径。
可以用this调用一个构造器,但不能调用两个。且必须将构造器调用置于最起始处,否则编译器会保错。this.s = s,this.s代表数据成员,s代表参数s。
除了构造器之外,编译器禁止在其他任何方法中调用构造器。

5.4.2 static的含义
Static方法是没有this的方法。在static方法的内部不能调用非静态方法,反过来倒是可以的,而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这正是static方法的主要用途。类似于全局方法,java中禁止使用全局方法,但在类中置入static方法就可以访问其他static方法和static域。
使用static方法时,由于不存在this,所以不是通过“向对象发送消息”的方式来完成的。如果在代码中出现了大量的static方法,就该重新考虑自己的设计了。

5.5 清理:终结处理和垃圾回收
垃圾回收的特殊情况:某些对象(并非使用new)获得了一块“特殊”的内存区域,而垃圾回收器值知道释放那些经由new分配的内存,所以它不知道该如何释放该对象的这块“特殊”内存。为了应对这种情况,java允许在类中定义一个名为finalize()的方法。
finalize()工作原理:垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存,使用finalize(),就能在垃圾回收时刻做一些重要的清理工作。
编程陷阱:可能把finalize()当作C++中的析构函数(C++中销毁对象必须用到这个函数)。区分:在C++中,对象一定会被销毁(如果程序中没有缺陷的话),而java中的对象却并非总是被垃圾回收,即:1.对象可能不被垃圾回收。2.垃圾回收并不等于“析构”。
Java没有提供“析构函数”或相似的概念,要做类似的清理工作,必须自己动手创建一个执行清理工作的普通方法。
垃圾回收本身也有开销,如果不使用,就不用支付这部分开销。

5.5.1 finalize()的用途何在
不能将finalize()作为通用的清理方法。
3.垃圾回收只与内存有关。
使用垃圾回收器的唯一原因是为了回收程序不再使用的内存。所以对于与垃圾回收有关的任何行为来说(尤其是finalize()方法),它们也必须同内存及其回收有关。
无论对象是如何创建的,垃圾回收器都会负责释放对象占据的所有内存。这将对finalize()的需求限制到一种特殊情况,即通过某种创建对象方式以外的方式为对象分配了存储空间。
Java中一切皆为对象,那么这种特殊情况是怎么回事?
之所以要有finalize(),是由于在分配内存时可能采用了类似C语言中的做法,而非java中的通常做法。这种情况主要发生在使用“本地方法”的情况下,本地方法是一种在java中调用非java代码的方式。本地方法目前只支持C和C++,但他们可以调用其他语言写的代码,所以实际上可以调用任何代码。在非java代码中,也许会调用C的malloc()函数系列来分配存储空间,而且除非调用了free()函数,否则存储空间将得不到释放,从而造成内存泄漏。free()是C和C++中的函数,所以需要在finalize()中用本地方法调用它。
所以不要过多的使用finalize(),它不是进行普通的清理工作的合适场所。

5.5.2 你必须实施清理
Java不允许创建局部对象,必须使用new创建对象。没有用于释放对象的delete,因为垃圾回收器会帮助释放存储空间。
垃圾回收器不能完全代替析构函数,也不能直接调用finalize()。
无论是垃圾回收还是终结,都不保证一定会发生,如果java虚拟机(JVM)并未面临内存耗尽的情形,它是不会浪费时间去执行垃圾回收以恢复内存的。
分享到:
评论

相关推荐

    数据结构与算法分析_java语言描述课后答案(英文)

    - **第四章:树** —— 深入讨论了树的各种类型(如二叉树、平衡树等)及其操作,如遍历、插入和删除。 - **第五章:散列** —— 介绍了散列表的工作原理、散列函数的设计以及处理冲突的方法。 - **第六章:优先队列...

    电子书《面向对象程序设计与Java语言》(第0.1版)

    4. **多线程编程**:第十四章介绍了Java中的多线程编程,使读者能够编写并发程序以提高应用程序的效率和响应速度。 5. **网络通信编程**:第十五章讲解了如何利用Java实现网络通信,这对开发网络应用至关重要。 6....

    《Java面向对象程序设计(第2版)》例子源代码

    《Java面向对象程序设计(第2版)》是一本深入探讨Java编程的教材,尤其注重面向对象编程思想的讲解。本书通过丰富的实例代码,帮助读者理解并掌握Java语言的核心概念和面向对象编程的关键要素。在提供的压缩包文件...

    安卓Android源码——四次元新浪微博客户端项目.zip

    《安卓Android源码——四次元新浪微博客户端项目》 这个项目是针对安卓平台的一个开源实现,旨在解析并展示了新浪微博客户端的源代码。源码分析对于开发者来说是宝贵的资源,能够帮助我们深入理解移动应用的开发...

    第十五届蓝桥杯Java A组参赛总结

    ### 第十五届蓝桥杯Java A组参赛总结 #### 知识点一:比赛规则与流程 - **考试流程**:参赛者需首先下载题目,使用官方提供的解压密码解压试题包。整个考试时长为4小时。 - **提交方式**: - 在考试过程中,参赛...

    JNI编程指南书

    3. **第十一章至第十三章——JNI技术规范**:这部分内容作为技术规范,为开发者提供了详细的指引,既可以作为参考手册,也适用于那些需要自行实现JNI标准的高级用户。 #### 四、JNI的角色与限制 - **角色**:JNI...

    Java版数据结构与算法分析

    2. **加权图**:第十四章重点讨论了加权图的特性以及基于加权图的最短路径算法,如迪杰斯特拉算法、弗洛伊德算法等。 #### 六、综合运用 1. **何时使用何种数据结构**:最后一部分总结了在不同情况下选择合适的...

    计算机科学与技术学院毕业设计(论文)开题报告

    Java 编程思想. 2005 年 3 月第 1 版. 机械工业出版社. [3] James Keogh 著.潘颖 王磊译.J2ME 开发大全. 2004 年 2 月第 1 版. 清华大学出版社. [4] Ian Sommerville 著. 程成等译. 软件工程. 2003 年 1 月第 1 ...

    JSP源代码(CH09~CH15)

    《JSP源代码详解(CH09~CH15)——构建网上购物系统》 JSP(JavaServer Pages)是一种动态网页技术,它允许开发者在HTML页面中嵌入Java代码,实现服务器端的动态处理。本资料包包含了从CH09到CH15的JSP源代码,这些...

    数据结构与算法分析_java语言描述

    根据提供的文件信息,我们可以归纳出该书《数据结构与算法分析_java语言描述》的主要知识点及其相关内容。本书由Mark Allen Weiss撰写,是计算机科学领域内学习数据结构与算法的经典教材之一。接下来,我们将按照各...

    Android程序设计基础

     阅读本书唯一的前提条件,是具备对Java编程或类似面向对象语言(比如说C#)的基本理解,不需要拥有为移动设备开发软件的经验。实际上,如果你确实有这方面的经验,反倒应该忘记它们。Android是如此与众不同,因此...

    think in C sharp

    - **第14章:多线程编程**(713页)探讨了多线程编程的基础知识和C#中的实现方法。 #### 15. XML - **第15章:XML**(751页)讲解了如何使用C#处理XML文档。 #### 16. Web服务 (Web Services) - **第16章:Web服务...

    代码之美(中文完整版).pdf

    5.8 版本 6:第四次优化:缓存(Caching) 5.9 从故事中学到的 第6章 集成测试框架:脆弱之美 6.1. 三个类搞定一个验收测试框架 6.2. 框架设计的挑战 6.3. 开放式框架 6.4. 一个HTML解析器可以简单到什么程度? 6.5. ...

    SQL21日自学通(V1.0)

    **第十天:创建视图和索引** - **使用视图**:介绍了视图的概念及其用途。 - **列的重命名**:教授了如何更改视图中列的名称。 - **SQL对视图的处理过程**:解释了SQL引擎如何处理包含视图的查询请求。 以上内容...

Global site tag (gtag.js) - Google Analytics