《headfirstjava》--深入浅出java说明与归纳

上传人:自*** 文档编号:79726017 上传时间:2019-02-17 格式:DOC 页数:9 大小:107.80KB
返回 下载 相关 举报
《headfirstjava》--深入浅出java说明与归纳_第1页
第1页 / 共9页
《headfirstjava》--深入浅出java说明与归纳_第2页
第2页 / 共9页
《headfirstjava》--深入浅出java说明与归纳_第3页
第3页 / 共9页
《headfirstjava》--深入浅出java说明与归纳_第4页
第4页 / 共9页
《headfirstjava》--深入浅出java说明与归纳_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《《headfirstjava》--深入浅出java说明与归纳》由会员分享,可在线阅读,更多相关《《headfirstjava》--深入浅出java说明与归纳(9页珍藏版)》请在金锄头文库上搜索。

1、HEAD FIRST JAVA说明与归纳第一章 进入Java的世界(基本概念)主要介绍了Java的工作原理,发展简史,程序结构和一些简单的语法。学过其他语言的人表示这章完全没有压力。1, 程序的层次:源文件(source file)-类(class)-方法(methods)。2, Java里面integer和boolean不相容。3, 语法与C差不多,不过作者好像一直很反感拿C与Java作比较。第二章 拜访对象村(类与对象)一开始用了一个巨冷的故事来阐述面向过程编程与面向对象编程的差别(结果当然是面向对象优胜= =先保留意见吧)。1, 继承机制使子类可以通过继承父类代码来减少重复代码,覆盖机制

2、使子类在不必改动父类的同时可以选择实现自己的方法。(这个机制太强大了!)2, 类是绘制对象的蓝图,而对象是已知的事物加上执行的动作。对应着,类包括实例变量(instance variable)和方法(methods)。3, Java程序执行期间是一组可以相互调用或交流信息的对象,对象之间有着独立性(对象自治)。4, main()在java里面的作用:测试真正的类和启动Java应用程序。Java是面向对象的编程,所以main()里面基本是不带任何方法的,仅作为测试用和启动用。第三章 认识变量(primitive主数据类型和引用)介绍了primitive类型变量和引用变量,并阐述了之前的差别。1,

3、 变量必须有变量类型,两性类型与类之间有时是共通的,所以一般有着相同的命名规则(如果可能的话,每个单词的首字母都要大些,区分于变量名称的命名:除了第一个单词首字母要小写外,之后的单词的首字母都要大写)。2, 变量名称必须以字母,_或&开头(不能以数字开头)。3, 除非加上“f”,否则所有带小数点的值在Java里面都看作double类型。4, Primitive主数据类型变量值是该值的字节所表示的。5, 引用变量类似于指针,储存的是引用对象的地址(储存方式)。6, 圆点运算符(.)表示“取得圆点前面的对象,然后求出该对象在圆点后面的事物”。7, 当一个对象失去所有的引用变量时,它就完蛋了。8,

4、数组是对象,无论它里面装的是不是primitive类型。第四章 对象的行为(方法操作实例变量)一开始那张图片,我每次看到都想笑(那货的表情和动作都太到位了= =后面一页的*号冷笑话也很强大)。咳咳,这章主要是围绕对象的方法来阐述一些拓展技巧。1, 根据传入的实参(arguments)或者对象的实例变量(instance variable)的不同,同一个方法在同类型的不同的对象可以有着不同的表现形式。2, 实参(arguments)是传给方法的实际值,传入方法后就变成了形参。形参(parameters)与局部变量(local)类似是一样的。改变形参并不改变实参。(跟C一样)传入与返回的参数的值的

5、类型可以隐含地放大或者明确地缩小。3, 可以从方法里面返回值,声明了返回最好要返回(我敲代码时发觉时声明了返回不返回会报错的,但P78最后一个问题的回答并不是这样的囧),一般情况下只能返回一个值,但是可以返回一个数组,再深一层的,可以返回ArrayList,换言之,只要你封装好了,可以返回任意数量任意类型的任意变量的任意组合。(这也太强大了吧)4, Java是传值调用(pass by value),如果调用的实参是个引用变量,同样拷贝之。5, 用setter(mutator)和getter(accessor)进行封装(encapsulation),可以保证对象的实例变量可以通过设置setter

6、来防止被恶搞。(用private设置实例变量,用public来设置setter和getter)这样读取和更改实例变量的效率会变低,不过能够提高程序的抵抗力抗性和恢复力抗性。6, 实例变量有默认值(整形为0,浮点型为0.0,布尔型为false),局部变量没有默认值,使用前需要初始化。7, 使用=来比较两个primitive主数据类型或者两个引用是否引用到同一个对象。使用equals()来判断两个对象是否在意义上相等。(关于“在意义上”的概念需要斟酌,目前主要用于比较String类型是否相等)。第五章 超强力方法(编写程序)通过设计一个SimpleDotComGame大致地说明了程序设计与实现的步

7、骤。1, 程序设计的第一步是高层设计,把程序的基本架构抽象出来。(想起了万恶的NS图)2, 第二步,根据基本架构来构思需要什么对象,需要实现什么类。(这是与面向过程不一样的地方,但某程度上类的方法有点像面向过程中的过程函数的一部分,Java优胜在那强大的类的独立性)。书本上提议开发类的过程是:找出类应该做的事情-列出实例变量和方法-编写方法的伪代码-编写方法的测试用程序-实现类-测试方法-出错或重新设计-邀请辣妹参加庆功派对(= =这什么啊?)3, 伪码,描述要做什么而不是怎么做的类文字,书上的伪码都是全英文的,压力很大,不过估计以后也要习惯了,因为感觉上计算机方面比较好的书都是外国的。测试码

8、,写在真实码之前(因为真实码都写出来了估计就没动力写测试码了),目的是为了写好真实码之后测试真实码。4, 书本后面介绍了几个技巧:加强版的for(要先把环境参数调到1.5以上才能用);把字符串转换成整形的Integer.parseInt(String);还有C里面学习过的后递增和break语句。第六章 使用Java函数库 (认识Java的API)这章的页数很多,把第五章的游戏排BUG之后又升级到高级版(依然无界面)。之后介绍了Java API的用途和用法。1,排BUG过程中书本引入了强大ArrayList对象,这个对象很牛地,有着类似数组的简易操作性的同时有着类似链表的动态伸缩性,代价是它耗费

9、的资源多一点。(对于add(index, Object)这个方法,index的值与之前的值不能跳空)2,制作高级版时,书本用一堆球和杯子加遥控器的组合强调了Java是个面向对象的编程工具。3,接着写到了一些布尔表达式的运算符,跟C一样,所以没有压力。4, Java API中类是被包装在包中的;使用是必须使用import或者在出现的每个位置写出全称(除了java.lang包中的类);关于java和javax的趣闻;关于查询API给出了查阅参考书和查阅HTML API文档(真希望能具体点)。第七章 对象村的优质生活(继承与多态)我认为继承和覆盖是前十二章里面Java里面最强大的机制,拓展性,独立性

10、,适应性,易改性多态什么的就是为了配合这个强大的机制而存在的。1, 关于方法的继承(inheritance)与覆盖(override),书上说得是很清楚的,子类可以继承父类所有的非私有方法,也可以通过写出同名同参数的方法来覆盖父类的方法。方法调用时,遵循低阶优先原则。关于方法继承,有一点要分辨清楚的,子类继承了父类的方法,与把父类的方法的代码拷贝一份到子类的代码中的意义是不一样的,当其他对象引用该方法时,前者会跳入父类中进行调用,后者会跳入子类中进行调用(因为方法已经被覆盖了)。两者的主要差别是如果两者有着同名的实例变量,方法中又涉及了该实例变量,就会产生不同的结果。即使它们共用同一个实例变量

11、,这点上的模糊也通常会导致方法返回一个跟预想不一样的值或者产生一个预料未及的结果。关于实例变量的继承与覆盖,书上说得一般清楚,所以后来编码这一直弄得我好纠结。现在稍微清晰了一点,但也不保证我的理解是正确的,寄希望于下一本教材吧。上机操作后,我感觉“覆盖”这个概念对于实例变量来说不适用,“继承”还有有那点意思的,若子类里面没有新建同名的实例变量,类似于方法的继承,同样不能理解成把父类的关于实例变量的代码拷贝一份到子类中去,调用时,依然是通过调用父类的实例变量。而当子类中存在父类的同名实例变量时,不会产生覆盖,而且作为两个毫不相干的变量各自独自地存在于所属的类中,调用的时候根据引用的不同来区分。2

12、, 设计继承树的步骤:找出具有共同属性和行为的对象(用继承来防止子类中出现重复的程序代码)-设计代表共同状态与行为的类 -决定子类时候需要让某项行为(也就是方法的实现)有着特定不同的运作方式-通过寻找使用共同行为的子类来找出更多抽象化的机会-完成类的继承层次。3, 判断选择继承还是看作实例变量的方法:“是一个”(IS-A)和“有一个”(HAS-A)。4, 一些关于方法继承的细节:继承单向性(因而有了IS-A的单向性),父类无法继承子类的方法;子类中可以用super()来引用父类的方法;public类型的成员会被继承,private类型的成员不会被继承;x extends y & y exten

13、ds z - x extends z,就是说,x可以通过z的IS-A测试;继承可以减少重复代码,当要修改方法时,只要父类的参数没有改变,子类都不需要改动就能直接继承;继承定义出共同的协议,也就是说,继承可以确保某个父类之下所有子类都会有父类所持有的全部可继承方法;可以用final来标记类使它或者把里面的实例变量和方法标记成private来拒绝被继承;在不知道父类源代码仅知道其方法关键字的时候,可以通过继承的方法来设计功能有所延展的子类。5, 多态(polymorphism):当定义一组类的父型时,可以用子型的任何类来填补任何需要或期待父型的位置。换句话说,运用多态时,引用类型可以是实际对象类型

14、的父类,这样的话,参数和返回类型都可以多态化处理。其中有一点是要特别注意的,当一个对象实质是子类但它的引用对象是子类的父类时,虽然它本质是子类但它却不能调用子类中的任何东西,Java看重的是引用类型,也就是说此对象只能引用父型中的东西,但可以通过用子类的强制转换符来把引用转换成子类。6, 最后谈谈覆盖和重载,子类同名方法未必就能覆盖掉父类的方法:连参数类型和数目都相同时叫覆盖,稍有不同就叫重载。重载之间毫无联系,各自独立存在,JVM会根据参数的差别自行决定调用哪个重载的方法。最后是关于覆盖和重载的一些细节上的区分:覆盖(override),参数必须要一样,其返回类型必须要兼容;不能降低方法的存

15、取权限。重载(overload),返回类型可以不同;不能只改变返回类型(参数在类型和数目上至少要稍有不同);可以更改存取权限(因为相互独立)。第八章 深入多态(接口与抽象类)这章继续讨论多态,书上说没有接口活不下去,现在有点体会。Java子类有时候扮演着不同的角色,这时候就需要用到接口了,因为父类只能有一个,但是接口的话就没有这个限制了。1,抽象类(abstract class):有一些类在理论上是不应该被初始化的,这时候加上abstract关键字可以防止它被new出来。抽象类的作用就是在防止被初始化之余能被继承以维持多态。(*书上提到特例:抽象类可以有static成员,目前不明白)。抽象类必

16、须要被extends。2,抽象的方法:抽象的方法没有实体,因而一定要被覆盖,即必须要实现所有抽象的方法。当声明了一个抽象的方法时,该类必须标记成抽象类(我理解成这是要通过强迫设置子类继承来实现方法的覆盖)。3,万用类Object:所有类的父类;书上介绍的四个方法:equals(),hashCode(),getClass(),toString();Object的作用是为多态提供一个万能模板,因而同样要注意到Object类型的变量只能做Object类里面的方法,要使用子类的方法,只能通过强制转换符(再次强调Java很注重引用变量的类型:“编译器是根据引用类型来判断有哪些method可以调用,而不是根据Object确实的类型。”);而理所当然地,任何对象都可以使用Object里面的方法。

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

当前位置:首页 > 办公文档 > 其它办公文档

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