Java编程思想读书笔记_第1页
Java编程思想读书笔记_第2页
Java编程思想读书笔记_第3页
Java编程思想读书笔记_第4页
Java编程思想读书笔记_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java编程思想读书笔记这是一份试图提纲挈领的读书笔记,java编程思想这本八百多页的书娓娓道来地包含了太多细节,这对读者是 非常贴心的,我也强烈建议细细读这本书,如果你希望在短 时间内学会java这种语言,那么这本书不是最好的选择, 你可以看看谭浩强系列。我把看这本书的过程中,个人觉得 每一章中最重要的思想、用整理在这里,希望自己回顾的时 候有所参照和提高。也希望大家带着同样的目的来看本篇读 书笔记。第一章对象导论比起过程型语言编写的程序,用面向对象语言编写的程 序更加简单、易于理解、可复用。C+编程思想里也有这一章,是一个抛砖引自己的玉的章节,不明白可以跳过, 回头再看。第二章一切都是对象

2、java语言里面,一切都是对象,并且程序员是通过引用 来操纵对象。一个简单的例子,非常轻松地让读者进入java 的世界。需要注意的是java数据会储存在5个不同的地方: 寄存器、堆栈、堆、常量存储、非ram存储,用new创建的一般对象都放在堆中,而特殊的基本对象放在堆栈中,如果 想把基本对象也放在堆中,需要包装基本类型。第三章操作符java中的操作符语法类似于 c,所以学习起来一点困难 也没有。要特别注意两个比较大的整数相加或者相乘的时候 的溢出问题,用long或者biginteger 解决这个问题。第四章控制执行流程我想起pointer on c 这本书第一章就有这一句话, 本书适合那些希望

3、迅速学习一门新语言而不是被“为什么if和for很重要”的弱智问题耽搁进度的读者。呵呵,这一章 很不厌其烦地介绍了运算、操作符优先级、类型转换、选择 循环等基本特性,有 c或者C+编程经验的读者可以大概浏 览一下。第五章初始化和清理关于初始化:1. 初始化很重要,一定不要忘记。而且java编译器会很好的防止使用未初始化数据的意外,这是比 c和C+更优 的地方。2. 编译器初始化的顺序为:a.类首次加载的时候,有关静态初始化的所有动作都会 执行。a1.类的加载包括首次创建该类型的对象,或者该类的静态方法/静态域首次被访问a2.静态域的初始化在一切初始化之前,即静态变量散布在代码不同的地方,它们也会

4、在任何方法(包括构造器)调用之前被初始化b. 当用new calssname创建对象的时候,会在堆上开辟 足够的存储空间,这块存储空间被清零,然后执行字段的初 始化动作。(这里的字段初始化都是非静态的,因为静态的 变量已经在a中执行完毕,而且静态变量存储在不同的地方, 静态数据只占用一份存储空间)c. 执行构造器关于清理C+关于清理的部分包含很大不确定性。目前需要知道 的事情是,正常情况下,我们是不需要调用finalize 方法的,而且垃圾回收区会自动回收不再使用的对象,同时我们 需要自己注意一些需要关闭的文件。需要注意的是,用=对数组进行“赋值”的时候,实际 上是引用的传递,就是说,二者指向

5、同一堆。第六章访问权限控制关于包你应该有一个自己的域名,这样发布你的 java程序的 时候,就可以将你的包名设置为你的域名倒转。想要正确让 包工作,要正确设置classpath,对于新手来说,这的确是一个挑战。我当初就难到了。关于访问权限修饰词值得注意的是,如果两个编译单兀放在同一个目录下并 且都没有设置包名的话,他们对于对方都是拥有包访问权限 的。访问权限修饰词是修饰方法和数据,而不是类。类只有 两种访问权限,包访问权限或public 访问权限。默认为包访问权限。如果不希望其它任何人对该类拥有访问权限,可 以把所有的构造器设置为private 。但是有一个例外,可以通过该类自己的 stati

6、c 成员内部创建(于是就有了工厂设 计模式和单例设计模式)。第七章复用类有三种方法复用类:组合,继承,代理。组合即是在新的类里面放上已经定义的类的对象,然后 通过调用它的方法来实现自己的功能。继承是通过extends关键词继承某一父类,这样就能访 问父类的所有 public 方法(因此为了继承,一般的规则是 将父类的所有数据成员都指定为private ,将所有的方法都指定为public )。子类的初始化需要注意的是,(当创建了一个子类的对象时,该对象包含一个基类的子对象)java会在子类的构造器中插入对基类默认构造器的调用。但是如果 没有默认的基类构造器,或者想调用一个带参数的基类构造 器,就

7、必须用关键词 super显式地编写调用基类构造器的语 句,并且配上适当的参数列表。代理很有意思,(我们姑且使用导出类和基类这样的字 眼,但要清楚我们不是在讨论继承里面的关键词)在导出类 里保存一个基类的对象,然后用自己的方法对该基类的种种 方法进行包装。如何决定使用哪种方法复用类呢?is-a 就继承,has-a就用组合。而且,组合比继承总体上使用更广泛、代价更小。向上转型这个就牛逼了,第八章,第九章,第十章都与此密切相 关。看完本书之后印象最深的就是向上转型了。使用final的原因有很多种,一定要弄清楚为什么使用 final ,是由于设计还是效率。final作用于数据的时候:final 作用在

8、基本对象比如int上,该值就成为不可改变的,一旦被初始化就无法再被 更改,但是作用在普通的对象引用的时候,final 使引用恒定不变,但是引用指向的对象是可变的。编译器需要我们确 保final对象一定要被初始化,我们可以通过在构造器中初 始化他们,以达到相对自由的效果(称为空白final ,我认为这个名字容易让人误解)。java允许在参数列表中以声明 的方式将参数指明为 final ,这一特性主要用来向匿名内部 类传递数据(这很重要)。final作用于方法的时候,说明作者想保持该方法在继承的过程中不被改变,并且不被覆盖。同时,被final修饰的方法会被关闭“动态绑定”,这样编译器就会为fina

9、l方 法调用生成“有限”有效的代码。之所以说有限,是因为随 着编译器的牛逼,它生成的代码越来越有效。final作用于类的时候,即是作者声明对该类的设计不 允许任何继承。学习得更深入一些,可能对以下事实感到有兴趣:java中所有的事物都是对象,每个类的编译代码都存在于电脑中 的文件夹里(文件夹的层次根据反转域名得到),该文件只 有在需要使用程序代码时才被加载。具体的说,就是“类在 其任何static 成员函数(包括构造函数)被访问时加载”。 第八章多态多态的重要基本原理就是向上转型:继承允许将对象视 为它自己本身的类型或其基类型加以处处理。将一个方法调用和一个方法主题关联起来称为绑定, java

10、中所有的方法都是后期绑定(除了 static 方法和final 方法),所以我们可以编写只与基类打交道的程序代码,并 且这些代码对所有的导出类都可以正确运行。(为什么static 不动态绑定:因为 static 方法的主要 用法就是用类名.方法名这样的方式来调用,不存在“发送 消息给某个对象,让对象判断自己怎么做”这样的情况。为什么final不动态绑定:这是早期final的一种用法, 由程序员指定某方法为final ,意味着程序员明了动态绑定的机制,并且声明该方法不需要动态绑定,这样可以获得更好的性能。这种用法已经很少使用了初始化的时候,导出类的构造函数会自动调用基类的默 认构造函数,此过程一

11、直递归到最基本的基类。如果需要调 用有参数的构造函数就需要手动执行。反过来,如果需要进 行清理工作(大部分时候我们都不需要),务必手动执行基 类的清理工作先。比如继承链的每个类都实现dispose方法,那么执行某个类的清理工作的时候,需要手动调用。不过此种情况下,务必在执行之前释放成员对象,清理顺序与执行顺序是相反的。此外,构造器方面有更加复杂的调用机制,我们不用理 它,只需要知道一条有效的准则“用尽可能简单的方法使对 象进入正常状态,如果可以的话避免调用其它方法”。java编译器能够允许向上多态,就是因为 java的机制 能保存对象的类型信息,即 rtti ,正因为这种机制,java 编译器

12、也允许向下转型, 以获得扩展类的“扩展出”的方法。(另,扩展类“扩展”了方法的这种继承不是“纯继承”, 这样做好不好?用户自己度量)。向下转型失败的话会抛出 一个 classcastexception 。虽然这一章都是在讲多态,但是多态并不总是解决问题 最好的方案,它有可能使事情不必要地复杂起来,我们应该 总是优先考虑更加灵活的组合。第九章接口一种专门提供“接口”的类叫抽象类,若含有至少一个abstract方法,该类就必须被声明为abstract的。抽象方法没有方法体,派生类必须实现它,否则派生类也必须被生 命为抽象的。interface关键词使抽象的概念更进了一步:1.这个“类”完全抽象。2

13、. 一个类可以向上转型为多种interface <要让一个类遵循某个特定接口,需要使用implement关键字。在这一章中出现了“策略设计模式”这个词。创建一个能够根据所传递的参数对象的不同而具有不同行为的方法,被称为策略设计模式。策略设计模式跟适配器设计模式联合使用可以提供非常强大的功能,比如我们遇到了无法更改的类(别人编写 的),想要它满足我们的接口然后放到设计模式里面去(当 然满足了接口之后的用法就不止如此了),就可以编写一个 适配器,包装该类同时产生我所需要的接口。使用抽象类和接口的两个原因是:1.在多重继承关系中(这真的很常见,看看java api就知道了),导出类可以被向上转

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论