java编程思想 第一章学习笔记

2019-11-25  本文已影响0人  _AlphaBaby_

第一章 笔记

引言

  1. 《java编程思想》的初衷是面向自学人员的,如果你不会c/c++语言也不用的担心。
  2. 书本的章节由作者精心安排,每章节都有重点,而且有练习的间隔时间,能给读者提供扎实的基础。

章节设计

  1. 对象对门 对象的概念
  2. 一切皆对象 java是怎么去表达对象的,说人话就是用代码怎么去写对象
  3. 控制程序流程 主要是三大结构,每种语言都有,不同的是java有标签式break和contiune,其实 go也有这个
  4. 初始化和清除 主要是java中的构造函数和垃圾回收器,说理论点就是 对内存的分配和释放,特别是垃圾回收算法可以去深入了解
  5. 隐藏实现过程 自我理解--封装性
  6. 类再生 类的继承性 可以很好的服用代码等优点
  7. 多形性 多态性,,类似go中有种duck-typing的编程思想
  8. 对象的容纳 java的集合框架,说人话就是java自带的封装好的数据结构 一般都是 stack queue hashtable hashmap 之类的
  9. 违例差错控制 java的异常处理机制。
  10. java IO系统 io是计算机内存和外设的数据流动 网络IO这是一种特殊的IO java里面的IO则是以流的方式来处理,关于流理解的不是很深刻,则需要后续多理解理解。
  11. 运行期类型鉴定 也就是java的反射机制,还需要后续的深入理解
  12. 传递和返回对象 主要涉及句柄的知识
  13. javaGUI 不重要
  14. 多线程 深入理解多线程,学会java对多线程的表达,清楚IO密集型 计算密集型 合理运用多线程
  15. 网络编程 也就是socket编程, java从BIO-》NIO-》AIO-》netty
  16. 涉及范式 书上说的是举一个例子然后对方案不对的改革,体会到使设计思路变得清晰起来的一种途径, 我可能会理解成设计模式
  17. 项目 对前面知识的应用和扩展

第一章 阅读总结 -- 对象入门

1.1 抽象的进步

优点:对管理人员,更快和更廉价的开发和维护过程,对建模处理变得更加简单,能生成更加简单、易于维护的的设计方案。 缺点:学习成本高,设计出优秀的重复性使用的类是具有挑战性的,对初入门面对对象编程的人员是一个痛苦的选择。

第一章作者会来后面来证明面对对象是多么的简单。从思想上解释面对对象程序设计。

汇编是对计算机本体,计算机组织结构的抽象。 BASIC和C等是对汇编的更加抽象,但是并没有屏蔽掉开发人员对计算机组成原理的认识, java在这基础上(c等低级语言)的抽象,我觉得也可以理解成封装,把复杂的东西封装起来,给开发人员调用就行了,不需要他们k 4. 每个对象都拥有其类型 5. 某一特定类型的所有对象都可以接受同样的消息。

1.2 每个对象都有一个接口

面向对象语言,实际上是创建新的数据类型,-- 可以对应到C的结构体。 类描述了相同特性和行为的对象集合,所以类实际上就是一个数据类型,我以前最开始再理解C的结构体的时候就是把结构体理解成一种开发者自定义的数据类型。

向某个对象发送消息就是调用某个对象的方法,

UML的设计

1.3 每个对象都提供服务

试图开发或者理解程序设计师,最好的方法之一就是将对象想象为“服务提供者”。

代码是的设计可以先从程序提供了什么服务开始思考,设计程序应该有什么类,不同的类分别提供了什么服务等。。。这样还能简化别人使用你的代码的学习成本

1.4 被隐藏的具体实现

用一些权限修饰符,限制某些成员的权限,权限不能给的太大,也不能给的太小。public private protected (还有一种默认的权限) public 》 protected》(default)》private

1.5 复用具体实现

一个被设计完并测试完的类是可以复用的,代码复用是java中提供的一个了不起的优点之一。 最简单的使用就是:实例化某个提供的类,也可以说成是创建一个对象(组合),其次是可以 继承类实现接口

1.6 继承

继承应该是复用代码最常用的方式了,我们不但可以继承父类已有的数据方法,还可以增加和修改父类的方法,但是同时也有弊端,如果你修改了基类(也可以称作父类超类),就可以影响被继承的类。

垃圾回收的例子 -- 以垃圾为基类 几何图形的例子 --

导出类继承了基类后,不但复制了基类的数据和方法,更重要的是复制了基类的接口(这里的接口指的是对象的方法),同时可以发送给基类对象的消息也可以发送给导出类 一个圆同时也是一个几何图形,同时体现了 多态性

1.6.1 “是一个” 与 “像是一个” 关系

举例 圆是继承于几何图形的,我们就可以说:一个圆就是一个几何图形。判断继承就要用:is-a来描述类之间的关系。 一般我们在新的导出类中添加了新的接口,也就是拓展了接口,我们就可以这样来描述基类和导出类的关系:is-like-a,举例,如果你家的空调(为了制冷)坏了,你去买一个热力泵替换他(热力泵既可以制冷也可以制热),这时候我们就可以说:空调 is-like-a 热力泵

1.7 伴随多态的可互换对象

阐述我对前期绑定(编译阶段决定),和后期绑定(运行阶段决定)的理解 (重点阐述) 因为java本身自动支持了后期绑定(在运行阶段确定),所以天然支持多态

上转型下转型

1.8 单继承结构

所有的类都是继承于 Object 类,单继承结构是有一定的好处的(代码兼容性) 单继承也使得垃圾回收变得更加容易,-- 可以拓展出去,理解下堆内存和栈内存,和栈数据结构。(堆,栈,堆栈)

1.9 容器

说得比较抽象一点可以称作“容器”,再具体一点可以叫做数组或者链表,再具体一点就是 一片内存空间 比如在CPP中就是 STL,java中也有很多满足不同需求的容器,比如:List,Map,Set,其实本质上就是对数据结构中常用结构的封装,或者叫实现。

java中有各种各样的容器,需要我们针对不同的需求和场景选择不同的容器

1.9.1 参数化类型

泛型--在容器中如果不适用泛型,就会有向上转型和向下转型, 在java中所有的类都继承于 Object 类,golang中,所有的结构体都实现了 interface{} 空结构体,这是比较相似的。 但是为什么go不提供泛型呢?可以思考

1.10 对象的创建和生命周期

对于自带垃圾回收的语言,一个好的垃圾回收机制对程序的执行效率来说是非常重要的, 栈上的内存效率远高于堆上的内存,

1.11 异常处理,处理错误

大多数错误处理的机制的主要问题在于,他们都依赖于程序员的自我警惕性,可以对比go和java的异常处理 异常处理不是面向对象的特征,在面向对象出来之前就已经存在了。

java中本身就内置了异常处理,并强制要求使用,不然编译器就会报错。

1.12 并发编程

在java中的并发编程往往都是通过多线程来解决,在go中往往都是通过多协程来解决。 随之而来的就是对临界资源的竞争问题,然后就会谈到锁。

1.13 Java与Internet

java Web的发展历史,看看就行了

1.14 总结

虽然初学OOP可能比较恼火,但是对于一个设计良好的程序中,面对对象的代码量会更少,理解起来也更容易。

上一篇下一篇

猜你喜欢

热点阅读