[java编程思想第五版]Java编程思想读书笔记
【fanwen.jxxyjl.com--读书笔记】
这是一份试图提纲挈领的读书笔记,《java编程思想》这本八百多页的书娓娓道来地包含了太多细节,这对读者是非常贴心的,我也强烈建议细细读这本书,如果你希望在短时间内学会java这种语言,那么这本书不是最好的选择,你可以看看谭浩强系列。我把看这本书的过程中,个人觉得每一章中最重要的思想、用整理在这里,希望自己回顾的时候有所参照和提高。也希望大家带着同样的目的来看本篇读书笔记。
第一章 对象导论
比起过程型语言编写的程序,用面向对象语言编写的程序更加简单、易于理解、可复用。《c++编程思想》里也有这一章,是一个抛砖引自己的玉的章节,不明白可以跳过,回头再看。
第二章 一切都是对象
java语言里面,一切都是对象,并且程序员是通过引用来操纵对象。一个简单的例子,非常轻松地让读者进入java的世界。需要注意的是java数据会储存在5个不同的地方:寄存器、堆栈、堆、常量存储、非ram存储,用new创建的一般对象都放在堆中,而特殊的基本对象放在堆栈中,如果想把基本对象也放在堆中,需要包装基本类型。
第三章 操作符
java中的操作符语法类似于c,所以学习起来一点困难也没有。要特别注意两个比较大的整数相加或者相乘的时候的溢出问题,用long或者biginteger解决这个问题。
第四章 控制执行流程
我想起《pointer on c》这本书第一章就有这一句话,本书适合那些希望迅速学习一门新语言而不是被“为什么if和for很重要”的弱智问题耽搁进度的读者。呵呵,这一章很不厌其烦地介绍了运算、操作符优先级、类型转换、选择循环等基本特性,有c或者c++编程经验的读者可以大概浏览一下。
第五章 初始化和清理
关于初始化:
1.初始化很重要,一定不要忘记。而且java编译器会很好的防止使用未初始化数据的意外,这是比c和c++更优的地方。
2.编译器初始化的顺序为:
a.类首次加载的时候,有关静态初始化的所有动作都会执行。
a1.类的加载包括首次创建该类型的对象,或者该类的静态方法/静态域首次被访问
a2.静态域的初始化在一切初始化之前,即静态变量散布在代码不同的地方,它们也会在任何方法(包括构造器)调用之前被初始化
b.当用new calssname()创建对象的时候,会在堆上开辟足够的存储空间,这块存储空间被清零,然后执行字段的初始化动作。(这里的字段初始化都是非静态的,因为静态的变量已经在a中执行完毕,而且静态变量存储在不同的地方,静态数据只占用一份存储空间)
c.执行构造器
关于清理
c++关于清理的部分包含很大不确定性。目前需要知道的事情是,正常情况下,我们是不需要调用finalize方法的,而且垃圾回收区会自动回收不再使用的对象,同时我们需要自己注意一些需要关闭的文件。
需要注意的是,用=对数组进行“赋值”的时候,实际上是引用的传递,就是说,二者指向同一堆。
第六章 访问权限控制
关于包
你应该有一个自己的域名,这样发布你的java程序的时候,就可以将你的包名设置为你的域名倒转。想要正确让包工作,要正确设置classpath,对于新手来说,这的确是一个挑战。我当初就难到了。
关于访问权限修饰词
值得注意的是,如果两个编译单元放在同一个目录下并且都没有设置包名的话,他们对于对方都是拥有包访问权限的。访问权限修饰词是修饰方法和数据,而不是类。类只有两种访问权限,包访问权限或public访问权限。默认为包访问权限。如果不希望其它任何人对该类拥有访问权限,可以把所有的构造器设置为private。但是有一个例外,可以通过该类自己的static成员内部创建(于是就有了工厂设计模式和单例设计模式)。
第七章 复用类
有三种方法复用类:组合,继承,代理。
组合即是在新的类里面放上已经定义的类的对象,然后通过调用它的方法来实现自己的功能。
继承是通过extends关键词继承某一父类,这样就能访问父类的所有public方法(因此为了继承,一般的规则是将父类的所有数据成员都指定为private,将所有的方法都指定为public)。子类的初始化需要注意的是,(当创建了一个子类的对象时,该对象包含一个基类的子对象)java会在子类的构造器中插入对基类默认构造器的调用。但是如果没有默认的基类构造器,或者想调用一个带参数的基类构造器,就必须用关键词super显式地编写调用基类构造器的语句,并且配上适当的参数列表。123
代理很有意思,(我们姑且使用导出类和基类这样的字眼,但要清楚我们不是在讨论继承里面的关键词)在导出类里保存一个基类的对象,然后用自己的方法对该基类的种种方法进行包装。
如何决定使用哪种方法复用类呢?is-a就继承,has-a就用组合。而且,组合比继承总体上使用更广泛、代价更小。
向上转型
这个就牛逼了,第八章,第九章,第十章都与此密切相关。看完本书之后印象最深的就是向上转型了。
使用final的原因有很多种,一定要弄清楚为什么使用final,是由于设计还是效率。
final作用于数据的时候:final作用在基本对象比如int上,该值就成为不可改变的,一旦被初始化就无法再被更改,但是作用在普通的对象引用的时候,final使引用恒定不变,但是引用指向的对象是可变的。编译器需要我们确保final对象一定要被初始化,我们可以通过在构造器中初始化他们,以达到相对自由的效果(称为空白final,我认为这个名字容易让人误解)。java允许在参数列表中以声明的方式将参数指明为final,这一特性主要用来向匿名内部类传递数据(这很重要)。
final作用于方法的时候,说明作者想保持该方法在继承的过程中不被改变,并且不被覆盖。同时,被final修饰的方法会被关闭“动态绑定”,这样编译器就会为final方法调用生成“有限”有效的代码。之所以说有限,是因为随着编译器的牛逼,它生成的代码越来越有效。
final作用于类的时候,即是作者声明对该类的设计不允许任何继承。
学习得更深入一些,可能对以下事实感到有兴趣:java中所有的事物都是对象,每个类的编译代码都存在于电脑中的文件夹里(文件夹的层次根据反转域名得到),该文件只有在需要使用程序代码时才被加载。具体的说,就是“类在其任何static成员函数(包括构造函数)被访问时加载”。第八章 多态
多态的重要基本原理就是向上转型:继承允许将对象视为它自己本身的类型或其基类型加以处处理。
将一个方法调用和一个方法主题关联起来称为绑定,java中所有的方法都是后期绑定(除了static方法和final方法),所以我们可以编写只与基类打交道的程序代码,并且这些代码对所有的导出类都可以正确运行。
(为什么static不动态绑定:因为static方法的主要用法就是用类名.方法名这样的方式来调用,不存在“发送消息给某个对象,让对象判断自己怎么做”这样的情况。
为什么final不动态绑定:这是早期final的一种用法,由程序员指定某方法为final,意味着程序员明了动态绑定的机制,并且声明该方法不需要动态绑定,这样可以获得更好的性能。这种用法已经很少使用了。)
初始化的时候,导出类的构造函数会自动调用基类的默认构造函数,此过程一直递归到最基本的基类。如果需要调用有参数的构造函数就需要手动执行。反过来,如果需要进行清理工作(大部分时候我们都不需要),务必手动执行基类的清理工作先。比如继承链的每个类都实现dispose()方法,那么执行某个类的清理工作的时候,需要手动调用super.dispose()。不过此种情况下,务必在执行super.dispose()之前释放成员对象,清理顺序与执行顺序是相反的。
此外,构造器方面有更加复杂的调用机制,我们不用理它,只需要知道一条有效的准则“用尽可能简单的方法使对象进入正常状态,如果可以的话避免调用其它方法”。
java编译器能够允许向上多态,就是因为java的机制能保存对象的类型信息,即rtti,正因为这种机制,java编译器也允许向下转型,以获得扩展类的“扩展出”的方法。(另,扩展类“扩展”了方法的这种继承不是“纯继承”,这样做好不好?用户自己度量)。向下转型失败的话会抛出一个classcastexception。
虽然这一章都是在讲多态,但是多态并不总是解决问题最好的方案,它有可能使事情不必要地复杂起来,我们应该总是优先考虑更加灵活的组合。
第九章 接口
一种专门提供“接口”的类叫抽象类,若含有至少一个abstract方法,该类就必须被声明为abstract的。抽象方法没有方法体,派生类必须实现它,否则派生类也必须被生命为抽象的。
interface关键词使抽象的概念更进了一步:1.这个“类”完全抽象。2.一个类可以向上转型为多种interface。要让一个类遵循某个特定接口,需要使用implement关键字。
在这一章中出现了“策略设计模式”这个词。创建一个能够根据所传递的参数对象的不同而具有不同行为的方法,被称为策略设计模式。
策略设计模式跟适配器设计模式联合使用可以提供非常强大的功能,比如我们遇到了无法更改的类(别人编写的),想要它满足我们的接口然后放到设计模式里面去(当然满足了接口之后的用法就不止如此了),就可以编写一个适配器,包装该类同时产生我所需要的接口。123
使用抽象类和接口的两个原因是:1.在多重继承关系中(这真的很常见,看看java api就知道了),导出类可以被向上转型为每一个接口。2.防止客户端程序员创建该类的对象。那么我们该使用抽象类还是接口呢?事实上,如果知道某事物应该成为一个基类,那么第一选择应该是使它成为一个接口。
接口之间的继承能够形成很好的体系,更像我们的现实生活。但是要特别注意的是,在不同接口中使用相同的方法名通常会造成代码可读性的混乱,令人不快。
工厂方法设计模式是又一个重要的设计模式。我们在代码中增加额外的间接性,一个重要的原因是想要创建框架。
123-
[读书笔记的好词摘抄大全]读书笔记的好词摘抄详细阅读
下面是的小编为你们整理的文章,希望你们能够喜欢 读书笔记的句子摘抄 1、如果眼泪可以换成亲人的长命百岁,我愿用这轮回的生生世世所有的眼泪,去换取她的长命百岁!可是这只是幻想幻想而已!不要在胡思乱想了,人生总会与世分别的那一天,只是或早或晚,我努力的安慰自己,使自己心里平静下来! 2、风,悄...
-
[童年读书笔记好词好句摘抄及感悟]童年读书笔记好词好句摘抄详细阅读
下面是的小编为你们整理的文章,希望你们能够喜欢 童年读书笔记好词好句 好词: 玩耍嬉戏、装聋作哑、装腔作势 装模装样、若无其事、调皮捣蛋 满身泥浆、追来逐去、大发脾气 舞刀弄棍、瓮中捉鳖、胸有成竹 得心应手、随心所欲、左右逢源 欢呼雀跃、天真烂漫、无忧无虑 牙牙学语、东跑西颠、...
-
[红岩读书笔记句子摘抄及感悟]教师读书笔记句子摘抄及感悟详细阅读
教师读书笔记摘抄 1、每个有文化、有教养的人都向往创造性劳动的欢乐,以及由于劳动的创造性而带来的生活上的充实。 2、不要向儿童要求他不可能做到的事情。 3、教学和教育的技巧和艺术在于,要使每一个儿童的力量和可能性发挥出来,使他享受到脑力劳动中的成功的乐趣。 4、对每一节课,都要用终生的时...
-
童年读书笔记350字左右_童年读书笔记350字作文详细阅读
读《童年》我明白了一个道理;每个人的童年都不一样,有的快乐有的悲惨。我们要学会珍惜,只要心中有梦想再大的困难也能克服,再多的痛苦也都会过去。下面是的小编为你们整理的文章,希望你们能够喜欢 童年读书笔记350字 我读了高尔基的《童年》之后,心情久久不能平静。 小说中的主人公阿廖沙的生活环境是...
-
小学五年级读书笔记范文100十篇_五年级写读书笔记范文5篇详细阅读
抚爱,或许并不是每个人都想文章中的父亲一样,那么幽默善于表达爱意,但我想,这个世界上的每一位父亲的心都和稳重的父亲一样,希望自己的孩子好,希望自己的付出可以换来孩子的健康和快乐!下面是的小编为你们整理的文章,希望你们能够喜欢 《心声》读书笔记400字 心声是一名考生写下的满分作文,里面的故事...
-
《钢铁是怎样炼成的》读书笔记_《钢铁是怎样炼成的》读书笔记详细阅读
《钢铁是怎样炼成的》这是一本让人读后觉得荡气回肠的书,这是一首英雄的颂歌。下面是小编精心为您整理的 《钢铁是怎样炼成的》读书笔记,希望您喜欢! 《钢铁是怎样炼成的》读书笔记 《钢铁是怎样炼成的》这本书作者是尼古拉 奥斯特洛夫斯基,他是一个普通的工人、红军战士、共青团基层干部。《钢铁是怎样炼成...
-
昆虫记读书笔记3000字初中|昆虫记读书笔记3000字作文详细阅读
《昆虫记》不仅仅充满着对生命的敬畏之情,更蕴涵着追求真理、探求真相的求真精神,在生活中和学习中,我们要学习法布尔勇于探索世界、勇于追求真理的勇气和毅力, 下面是的小编为你们整理的文章,希望你们能够喜欢 昆虫记读书笔记 《昆虫记》,是一部很吸引人的著作 这本书的作者是法布尔,他用了毕生的精力研...
-
七年级下册语文优秀作文范文_七年级读书笔记的优秀作文范文5篇详细阅读
读书笔记是指读书时为了把自己的读书心得记录下来或为了把文中的精彩部分整理出来而做的笔记。在读书时,写读书笔记是训练阅读的好方法。 下面是小编收集整理的七年级读书笔记的优秀作文范文5篇,欢迎借鉴参考。 七年级读书笔记的优秀作文范文5篇(一) 《失火之后》读书笔记 《失火之后》这篇作文语言生动...
-
【《我们都一样】《我们都一样,年轻又彷徨》读书笔记范文详细阅读
:《我们都一样,年轻又彷徨》由北大最励志双胞胎苑子文和苑子豪所创作,讲述了20个关于勇气、成长与爱的正能量青春故事。下面就让我们一起来欣赏关于《我们都一样,年轻又彷徨》的读书笔记吧。 这是一对来自北大励志的双胞胎的传奇故事。哥哥叫苑子文,弟弟叫苑子豪。先是从两个将近两百斤的胖子减肥成功,再是两...
-
初中读书笔记范文10篇_初中读书笔记范文5篇详细阅读
静下心来默默的品尝一本名著,是人生中一种难以言喻的享受。下面是的小编为你们整理的文章,希望你们能够喜欢 峭壁边缘的读书笔记 说来惭愧,作为主修经济的大学生,时至今日,若让我谈谈对20xx年经济危机的看法,实在列不出那么一二三点,此次便选择峭壁边缘一书,也算是倒逼自己对那次贷危机有一个较深入的...