java编程思想 第一章学习笔记
第一章 笔记
引言
- 《java编程思想》的初衷是面向自学人员的,如果你不会c/c++语言也不用的担心。
- 书本的章节由作者精心安排,每章节都有重点,而且有练习的间隔时间,能给读者提供扎实的基础。
章节设计
- 对象对门 对象的概念
- 一切皆对象 java是怎么去表达对象的,说人话就是用代码怎么去写对象
- 控制程序流程 主要是三大结构,每种语言都有,不同的是java有标签式break和contiune,其实 go也有这个
- 初始化和清除 主要是java中的构造函数和垃圾回收器,说理论点就是 对内存的分配和释放,特别是垃圾回收算法可以去深入了解
- 隐藏实现过程 自我理解--封装性
- 类再生 类的继承性 可以很好的服用代码等优点
- 多形性 多态性,,类似go中有种duck-typing的编程思想
- 对象的容纳 java的集合框架,说人话就是java自带的封装好的数据结构 一般都是 stack queue hashtable hashmap 之类的
- 违例差错控制 java的异常处理机制。
- java IO系统 io是计算机内存和外设的数据流动 网络IO这是一种特殊的IO java里面的IO则是以流的方式来处理,关于流理解的不是很深刻,则需要后续多理解理解。
- 运行期类型鉴定 也就是java的反射机制,还需要后续的深入理解
- 传递和返回对象 主要涉及句柄的知识
- javaGUI 不重要
- 多线程 深入理解多线程,学会java对多线程的表达,清楚IO密集型 计算密集型 合理运用多线程
- 网络编程 也就是socket编程, java从BIO-》NIO-》AIO-》netty
- 涉及范式 书上说的是举一个例子然后对方案不对的改革,体会到使设计思路变得清晰起来的一种途径, 我可能会理解成设计模式
- 项目 对前面知识的应用和扩展
第一章 阅读总结 -- 对象入门
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可能比较恼火,但是对于一个设计良好的程序中,面对对象的代码量会更少,理解起来也更容易。