On Java 8读书笔记
第一章 什么是对象
1.1 抽象的历程
”对象“:问题空间中的元素及其解决方案空间中的具体呈现。
理念即是通过添加各种新的对象,可以将程序改编为一种描述问题的语言。
对象是具有状态、行为及标识的。
对象可以拥有自己的内部数据(用以赋予状态),方法(用以产生行为),对象在内存中都有唯一的地址。
1.2 对象具有接口
关键字class的由来:状态不同但结构相同的对象汇聚在一起而组成的同一类对象。
类是描述了一系列具有相同特征(即数据元素)和行为(即功能方法)的对象,也就是说类其实是数据类型。
在面向对象领域中,我们将创建的变量称为”对象“或者”实例“,将操作变量称为”发送消息“或者”发送请求“。
让一个对象真正的发挥其作用就是向对象发送请求。而对象能够接收什么请求,是由其接口决定,对象所归属的类则定义了这些接口。
eg:
类型名 | Light |
---|---|
接口 | on() |
off() | |
brighten() | |
dim() |
Light lt=new Light();
lt.on();
接口定义了能向这个对象发送的请求。
代码+隐藏的数据=”实现“
1.3 对象可以提供服务
在开发一个面向对象程序或者理解其设计时,可以将对象想象成”服务提供者“。程序是为用户提供服务的。
高内聚性:设计的组件(比如对象、方法、对象库等)无论从哪个方面都整合的很好。
1.4 隐藏的实现
程序员的两大阵营:”类的创建者“(负责创建新数据类型的人),”客户程序员“(在自己的应用程序里使用现有数据类型的人)。
”类的创建者“:只暴露必要的接口给客户程序员,同时隐藏其他所有不必要的信息。这样可以避免修改隐藏信息时对其他人造成的影响,即是隐藏代码的具体实现可以有效的减少程序的bug。
设置访问控制
首要原因:防止客户程序员接触本不应该接触的数据类型内部运转的代码(即非那些用于解决特定问题的接口部分)。
第二个原因:让接口部分和实现部分分离,便于库的设计者在改变类的内部工作机制时,不用担心影响到使用该类的客户程序员。
Java提供了三个显示的关键字(访问修饰符)来设置访问控制:
- public:可被所有人访问
- private:只能被类的创建者通过该类自身的方法访问
- protected:与private相似,但继承的子类可以访问protected成员
还有一种默认的访问权限,即是包访问(package access)
1.5 复用实现
复用一个类的最简单方法就是直接使用该类所生成的对象。
组合:新创建的类可以由任意数量和类型的对象组成,也可以任意组合这些对象以满足想要的功能,即是利用已有的类组合成一个新的类。(如果组合是动态的,通常称为聚合)
1.6 继承
为了避免重复性代码的书写(即创建功能相近的类),我们复制了现有的类并且能够在此基础上再做一些增补,这就是继承的好处。
子类可继承父类的所有成员变量和方法及接口,同时子类可以增加或者复写父类没有或者已有的成员变量和方法及接口。
区分子类和父类很简单,第一种直接为子类添加新的方法,那么执行时,父类的行为讲会和你的预期不符。第二种就是重写方法,可以让子类与父类增加差异化。
is-a关系与is-like-a关系
替换原则(里氏替换原则):即当只重写父类中定义的方法时,子类和父类的类型将会是完全相同的(接口一模一样),这样我们就能够用子类的对象代替父类的对象。这是一种理想的继承方式,即是is-a关系。
当我们为子类的接口添加新的内容时,子类依然能够代替父类的对象,但不饿能通过父类的接口获取子类的新方法,这种关系即是is-like-a关系。
1.7 多态
当涉及类型层次的时候,将一个对象视为父类的一个实例,而不是对象实际的类。
不同子类执行父类的同一方法时的结果应该是不同的,那么我们可能需要的是派生子类,这样可以扩展程序设计的能力。
eg:
当Bird对象的move()方法被调用时,(Goose对象执行的是行走、飞翔或者游泳,Penguin对象执行的则是移动或者游泳)。
我们将子类视为父类从而能够区别不同对象的不同方法,这也是向上转型。
前期绑定是非面向对象编译器的调用函数时所触发的,这样意味着当调用具体方法时,该方法名就决定了被执行代码的绝对地址。
但对于继承,程序需要运行时才能明确代码的地址,所以就有了面向对象使用的机制:后期绑定。(Java里会默认具备动态绑定特性,所以不用借助其他的关键字或者代码来实现多态,但c++会使用virtual关键字)
1.8 单根层次结构
单根层次结构有利于实现垃圾收集器,这也是Java相对于c++的一个重要改进。既然所有的对象都拥有类型信息,那么就不用再去了解某个对象具体是什么类型了,这个特性对于系统级别的操作尤其重要,比如异常处理。
1.9 集合
在大多数语言中,用数组就可以保存许多的内容。而Java中通常是创建一种新类型的对象,然后利用这个新对象来保存其他对象的引用,这个对象通常被叫做集合,并且会根据放入其中的内容而自行调整空间。
当然不同的集合也有着不同的用途:
几个不同的List类(用于保存序列),几个Map类(也叫做关联数组,用于关联对象),几个Set类(用于保存不同类型的对象),以及一些队列(queue)、树(tree)、栈(stack)等。
不同的集合在特定操作的执行效率上也有差异,比如:ArraytList和LinkedList,ArraytList随机获取元素是一种耗费固定时间的操作,意思就是不管你选择获取哪个元素,耗费的时间都是相同的,而LinkedList在列表中随机选择元素是一种代价很大的操作,查找列表更深处的元素也会耗费更多的时间。如果要在列表中插入元素,LinkedList耗费的时间会比ArrayList更少。
参数化类型(泛型)
当我们知道向上转型是安全的时,反过来我们不知道Object对象实际上是什么类型,那么这种向下转型就是不安全的,当然如果向下转型失败,会得到异常。
为了节省向下转型与其关联的运行检查所需要的时间,我们通常关注创建的集合能不能明确所包含的对象类型。
1.10 对象的创建和生命周期
C++需要显式删除对象,因为C++的宗旨是效率优先。
Java只允许动态分配内存。当创建一个对象时,需要new操作符来创建一个对象的动态实例。
Java语言的底层支持垃圾收集器机制,所以它会自动找到无用的对象并将其销毁。
1.11 异常处理
异常是从错误发生之处“抛出”的对象,而根据错误类型,它可以被对于的异常处理程序所“捕获”,当然异常不允许被忽略。
On Java 8读书笔记的更多相关文章
- java effective 读书笔记
java effective 读书笔记 []创建和销毁对象 静态工厂方法 就是“封装了底层 暴露出一个访问接口 ” 门面模式 多参数时 用构建器,就是用个内部类 再让内部类提供构造好的对象 枚举 si ...
- 深入理解Java虚拟机 -- 读书笔记(1):JVM运行时数据区域
深入理解Java虚拟机 -- 读书笔记:JVM运行时数据区域 本文转载:http://blog.csdn.net/jubincn/article/details/8607790 本系列为<深入理 ...
- Java并发读书笔记:线程安全与互斥同步
目录 导致线程不安全的原因 什么是线程安全 不可变 绝对线程安全 相对线程安全 线程兼容 线程对立 互斥同步实现线程安全 synchronized内置锁 锁即对象 是否要释放锁 实现原理 啥是重进入? ...
- 单元测试之道Java版——读书笔记
单元测试知道Java版读书笔记 首先我们必须要知道我们所写的代码,它的功能是什么,如果我们不了解代码的行为,那么也就无从测试. 我们测试的目的,是为了我们整个程序架构的稳定,代码其实就是欧文要实现功能 ...
- 《Effective Java》读书笔记(一)之创建和销毁对象
最近在研读<Effective Java>一书,读书不做点笔记,感觉很容易就忘掉,于是用本篇博客来记录阅读此书的笔记. 郑重声明: 由于是<Effective Java>一书的 ...
- 《Effective java》-----读书笔记
2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己!预计在2016年要看12本书,主要涉及java基础.Spring研究.java并 ...
- 《practical Java》读书笔记
题记: 花了一周把Peter Haggar的<practical Java>看了遍,有所感悟,年纪大了, 写下笔记,方便日后查看.也希望有缘之人可以看看,做个渺小的指路人. 不足之处还望指 ...
- 《Effective Java》读书笔记 - 11.序列化
Chapter 11 Serialization Item 74: Implement Serializable judiciously 让一个类的实例可以被序列化不仅仅是在类的声明中加上" ...
- 《Effective Java》读书笔记 - 10.并发
Chapter 10 Concurrency Item 66: Synchronize access to shared mutable data synchronized这个关键字不仅保证了同步,还 ...
- Think in java 4th读书笔记__last update20151130
一周至少两章,去掉最后的并发和图形化用户界面,刚好需要2个半月才能学好.这进度感觉有点慢,所以做下调整吧,改成一个月会不会更好点^^,认认真真的把java的圣经给看一遍. 计划: 第1~6 11.17 ...
随机推荐
- 永恒之蓝(MS17-010)漏洞复现
1. 漏洞介绍 永恒之蓝: 恒之蓝是指2017年4月14日晚,黑客团体Shadow Brokers(影子经纪人)公布一大批网络攻击工具,其中包含"永恒之蓝"工具,"永恒之 ...
- 阿里云下配置keepalive,利用HAVIP实现HA
注:这篇文章参考网络,有些称呼都变了,比如阿里云上的现在是弹性ip 包括阿里云在内的很多云环境,因为不支持浮动IP广受诟病.目前阿里云在VPC网络下发布了HAVIP,能够实现arp宣告IP.这样也就让 ...
- ELK 性能优化实践 ---总结篇
版本及硬件配置 JDK:JDK1.8_171-b11 (64 位) ES集群:由3台16核32G的虚拟机部署 ES 集群,每个节点分配 20 G 堆内存 ELK版本:6.3.0 垃圾回收器:ES 默认 ...
- 跳转控制语句break
执行某些循环时,当满足了某个条件,使其提早退出循环,便可以使用break跳出循环 流程图如下: 其他循环均可以以此类推 例子:
- js对象结构赋值const {XXX } =this
样例1: const { xxx } = this.state; 上面的写法是es6的写法,其实就相当于: const xxx = this.state.xxx 样例2: const {comment ...
- .NET 反向代理 YARP 代理 GRPC
前面的 YARP 文档中,介绍了怎么去代理 http,和如何根据域名转发,而在现在微服务的应用是越来越来多了,服务间的调用依靠 http 越来越不现实了,因为 http 多次握手的耗时越发的影响应用的 ...
- 企业信息化建PLM系统、ERP系统、MES系统是单个逐步建设好,还是同时上比较好?
企业信息化建PLM系统.ERP系统.MES系统肯定是单个逐步建设好啊,不仅仅是各个系统单独建设,系统内各模块的实施也应该先后逐步推进,切不可想着一口吃个大胖子,一股脑的全上,求全求快是很多系统实施失败 ...
- 初等数论学习笔记 III:数论函数与筛法
初等数论学习笔记 I:同余相关. 初等数论学习笔记 II:分解质因数. 1. 数论函数 本篇笔记所有内容均与数论函数相关.因此充分了解各种数论函数的名称,定义,符号和性质是必要的. 1.1 相关定义 ...
- H3C交换机配置DHCP服务器
dhcp server ip-pool vlan4020 network 10.3.7.0 mask 255.255.255.0 gateway-list 10.3.7.254 dns-list 20 ...
- Tensorflow Lite从入门到精通
TensorFlow Lite 是 TensorFlow 在移动和 IoT 等边缘设备端的解决方案,提供了 Java.Python 和 C++ API 库,可以运行在 Android.iOS 和 Ra ...