Java编程思想学习笔记

上传人:新** 文档编号:507907481 上传时间:2022-12-06 格式:DOCX 页数:48 大小:118.18KB
返回 下载 相关 举报
Java编程思想学习笔记_第1页
第1页 / 共48页
Java编程思想学习笔记_第2页
第2页 / 共48页
Java编程思想学习笔记_第3页
第3页 / 共48页
Java编程思想学习笔记_第4页
第4页 / 共48页
Java编程思想学习笔记_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《Java编程思想学习笔记》由会员分享,可在线阅读,更多相关《Java编程思想学习笔记(48页珍藏版)》请在金锄头文库上搜索。

1、文档供参考,可复制、编制,期待您的好评与关注! Java编程思想(2nd edition)学习笔记Author: elitesunryMail: Date: 2009-8-2Thinking in Java(2nd edition)0Learning notes0Chapter 1Introduction to objects31.面向对象程序设计的五大基本特质(P21)32.信息隐藏(P24)33.代码重用(P25)34.对象的形貌和寿命(P33)35.群集和迭代器(P34)46.单根继承体系(P36)57.管家面临的两难:谁该负责清理?(P38)58.异常处理:面对错误的发生(P39)69

2、.多线程(P39)610.持久性(P40)611.对象设计的五大阶段(P55)712.Object发展的指导原则(P56)713.Extreme Programming(P59)7Chapter 2Everything is an Object81.Reference是操控对象之钥匙(P69)82.对象的存储在哪里?(P70)83.Java中Array(P73)94.生存空间(scope)(P74)105.基本成员(primitive members)的default values(P77)106.关于函数需要注意的几点(P78)11Chapter 3Controlling Program F

3、low131.对位移运算符(Shift Operator)的几点讨论(P102)13Chapter 4Initialization & Cleanup151.关键字this(P143)152.static的含义(P145)153.清理(cleanup)、终结(finalization)与GC(P146)154.成员初始化(Member initialization)(P154)175.Array的初始化(P163)19Chapter 5Hiding the Implements201.Java访问权限饰词(access specifiers)(P180)202.Interface & impl

4、ements(P185)203.Class的访问权限(P186)20Chapter 6Reusing Classes211.Composition和Inheritance选择(P204)212.继承关系中的“清理”问题(P201)213.关键字final(P208)22Chapter 7Polymorphism241.多态(polymorphism)(P220)242.Method-call(函数调用)的绑定方式(P223)243.扩充性(extensibility)(P226)244.Abstract class & Abstract method(P230)255.Polymorphism

5、 methods在Constructor中的行为(P239)256.将inheritance用于设计(P241)27Chapter 8Interfaces & Inner Class291.Interface(P248)292.Java的多重继承(multiple inheritance in Java)(P251)293.接口合并时的命名冲突问题(P253)304.通过继承来扩充interface(P254)305.产生常量群(grouping constant)(P255)306.将interface内的数据成员初始化(P256)317.Inner class(P260)318.Anony

6、mous inner class(P265)339.与outer class之间的关系(P268)3410.Static inner class(P270)3411.继承inner class(P273)3412.Inner class可以被覆写(overridden)?(P274)3513.为什么需要inner Class?(P277)3514.Closure & call back(P279)3615.Inner class & control framework(P281)36Chapter 9Holding Your Objects44Chapter 1 Introduction to

7、 objects1. 面向对象程序设计的五大基本特质(P21)Alan Kay 曾经整理了Smalltalk的五大基本特质,同时也是面向对象程序设计的五大基本特质:万事万物皆对象(对象:具有相同属性和行为的事物的集合)程序便是成堆的对象,彼此通过消息的传递,请求其他对象进行工作每个对象都拥有由其他对象所构成的记忆每个对象皆有其型别同一个型别的所有对象接受的消息皆相同2. 信息隐藏(P24)程序的开发人员可以分为:class创造者在AP中使用前者开发的classes的客户端程序员(Client Programmer)Class的创造者的目标是打造class,并且仅暴露CP应该知道的事物,隐藏其他

8、事物。CP的目标是手机许多可供运用的classes以快速开发AP。在任何相互关系中,有一个“参与者共同遵守的界限”是很必要的。它会把以上二者的关系处理的很好,否则就会导致每个对象赤裸裸的暴露在阳光下。此机制存在的两个理由:(1)让class的打造者得以改变class内部运作方式而不担心影响AP。(2)让CP触碰不到他们不该触碰的事物。访问界限控制关键字:public、private、protected。3. 代码重用(P25)代码重用是OOP所提供的最了不起的优点之一,有两种方式。组合(Composition)或者聚合(aggregation):以既有的class合成新的class。将clas

9、s的成员对象声明为private,让CP无法直接取用他们。可以在不干扰现有用户程序代码的情况下,更动这些成员。也可以在执行期间改变成员对象,动态改变程序行为。(应该在设计中优先考虑组合)继承(Inheritance):在既有的class的基础上,使用extends关键字,构造出新的class。(可以理解为把parent class作为成员“放”入了新class)4. 对象的形貌和寿命(P33)极为重要的议题:对象的Create & Destroyed。4.1产生问题两种产生对象的方法:(速度优先)将对象置于stack(这样的对象成为automatic变量或scope变量)或静态存储区中,于是程

10、序撰写时便决定了对象的存储空间和寿命,这种安排的把重点摆在存储空间的分配与释放速度上。当然在得到速度的同时也失去了弹性,因为你必须确切的知道对象的数量、寿命、型别。如果你解决的是比较一般化的问题(例如:CAD、仓储管理、飞机管制系统等),这种方式就过于受限制了。(弹性优先)从heap中动态产生对象,在此种情况下,除非到了执行期,否则你无法回答对象的数量、寿命、型别为何问题。只有程序执行是才能给出答案,如果你要求新的对象,只需要在必要的时候从heap产生出来即可。由于执行期对存储空间的管理方式是动态的,所以从heap分配空间所耗用的时间远大于前者。(stack产生存储空间只需要移动stack指针

11、,一般为一条简单汇编指令;动态法适用于“对象比较复杂”的情况,因此才会使得对象的找寻和释放时必要的额外负担都不至于对对象的 产生造成重大冲击。它带来的弹性是解决一般化程序的不可或缺的根本!)Java采用第二种方法,在需要产生对象的时候使用new关键字来动态产生对象的实体(instance)。4.2寿命问题使用第一种凡事的程序语言中,编译器会判断对象应该存活多久,并可自动消灭之。但是在heap之中产生对象,编译器对其寿命一无所知。例如C+程序必须由你自写撰写代码来摧毁对象。否则会造成内存泄露(memory leaks);Java提供的GC机制,当对象不再被使用,会被自动察觉并消灭。GC不仅减少你

12、需要考虑的因素,减少代码数量,而且提供了更高阶的保障,避免memory leaks问题发生。5. 群集和迭代器(P34)如果你不知道你将动用多少对象,或者不知道这些对象该存活多久,才能够解决某个问题,那么你同样无法知道该如何存储这些对象。如何才能为这些对象准备多少空间。这其实永远都得不到答案,因为这些信息只有在执行期才能获得。对于大多数OOPL而言,这个问题可以用类似“指针数组”的方式解决(产生一种型别,这个型别存储一些reference,引用其他objects。这种对象一般被称为容器(container)或群集(collection),而在Java标准程序库中,则采用container来解决

13、,它会适当的扩展自己的容量,一边容纳你置入的东西(这就意味着你不需要知道将来会有多少个对象会置入其中。只需要产生container,它会自动料理细节。)。上述container都会提供元素的安插函数,以及取回函数,不过元素的取出动作较为复杂,因为“只进行单一选取动作”的函数约束太多,如果你想同时操作或比较“一组(而非一个)”元素时,就需要迭代器(Iterator)来解决。Iterrator作为一个对象,作为是用来选择容器中的元素,并将这些元素呈现给迭代器的使用者。它提供了某种抽象层级,将“容器的实现细节”和“对容器进行访问动作的代码”分离开来。经由迭代器,容器被抽象化为仅仅是一组序列(sequ

14、ence),迭代器让你得以走访整个序列,无需关注递呈究竟是ArrayList或LinkedList或Stack或其他。这种弹性使我们可以轻易更动底层结构而不至于干扰AP代码。这种抽象带来的另外一个好处:在设计前期可能采用LinkedList,但由于后期系统效能需求而采用ArrayList。迭代器的抽象化,使我们在进行诸如此类转换时,可将冲击降至最低。注:Java中ArrayList和LinkedList具备完全相同的接口与外在行为,但其某些操作上耗费的代价却截然不同。对ArrayList进行随机访问,可以再常量时间完成,和所选择的元素型别无关;对于LinkedList而言,因为他需要在链表上行

15、进以取得随机元素,越靠近末端则耗费时间越长。在元素安插方面,如果你将元素安插到中央位置,对LinkedList来说则会消耗少很多。故:不同动作的效率高下,完全取决于序列的底层结构。6. 单根继承体系(P36)Java中,所有的classes最终都继承自单一的base class Object。即:万物皆对象。单根集成体系中的所有对象都有共通的接口,所以最终他们都属于相同type。而C/C+则要花费大量的工作来处理和打造自己的和继承体系,以便提供某种便利性;Java的这种体制可以给你带来更大的生产力。单根继承体系保证所有的对象都拥有某些功能。在整个系统里,你因此知道可以在每个对象身上执行某些基本操作。单根继承体系再加上“在heap中产生所有对象”,大大简化了引数传递动作(这是C+里十分头疼的问题之一)。单根继

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 国内外标准规范

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号