On Java8 读书笔记(一)

Java的版本问题

当每次学习Java时,这么多版本从哪里开始学起呢?

从Java 8发布之后:6个月更新一次;授权、更新和支持的变化(授权收费),以及JDK的获取途径等。在此之上还有语言变化,包括那些Java 9中引入的主要变化。变化多的让人头晕目眩,目的是为了给世界上最流行的语言提供高质量、频繁且在计划内的更新,同时让负责该语言的人能够持续做下去。

当这个世界上最流行的语言不再频繁更新,可能就是他开始没落的开始。

我们需要理解,这些改变可能会影响你的应用程序和组织,通过学习如何接受这些变化,最终会让你接受Java 8以及其后每六个月一次的新版本中引入的改进。

变化虽多,从最基本,不变的开始学习!!!Java8在实际中使用的比例上还是占据大多数, 先学Java8 再过渡到Java11

 

“我们没有意识到惯用语言的结构有多大的力量。可以毫不夸张地说,它通过语义反应机制奴役我们。语言表现出来并在无意识中给我们留下深刻印象的结构会自动投射到我们周围的世界。” -- Alfred Korzybski (1930)

第一次软件革命,诞生了C语言等一系列面向过程的计算高级语言

第二次软件革命,诞生了C++为代表的一系列的面向对象编程(OOP)编程的高级计算机语言

那第三次软件革命将会出现什么?

                                                                            目录-------------->

面向对象编程(Objec-Oriented Programming)

1.抽象

Grady Booch:一个对象具有自己的状态,行为和标识。这意味着对象有自己的内部数据(提供状态)、方法 (产生行为),并彼此区分(每个对象在内存中都有唯一的地址)。

纯粹”的面向对象程序设计方法:

  1. 万物皆对象
  2. 程序是一组对象,通过消息传递来告知彼此该做什么。
  3. 每个对象都有自己的存储空间,可容纳其他对象。
  4. 每个对象都有一种类型。
  5. 同一类所有对象都能接收相同的消息。

 

2.接口

每个对象仅能接受特定的请求。我们向对象发出的请求是通过它的“接口”(Interface)定义的,对象的“类型”或“类”则规定了它的接口形式。“类型”与“接口”的对应关系是面向对象程序设计的基础。

 

3.服务提供

将这些问题一一分解,抽象成一组服务。软件设计的基本原则是高内聚:每个组件的内部作用明确,功能紧密相关。在良好的面向对象设计中,每个对象功能单一且高效

 

4.封装

应用程序员调用研发程序员构建的基础工具类来做快速开发

Java 有三个显式关键字来设置类中的访问权限:public(公开),private(私有)和protected(受保护)。

 

5.复用

一个类经创建和测试后,按道理是可复用的。但是,由于程序员没有足够的编程经验和远见,我们的代码复用性并不强。

新的类可以是由任意数量和任意类型的其他对象构成。这里涉及到“组合”和“聚合”的概念:

  • 组合(Composition)经常用来表示“拥有”关系(has-a relationship)。例如,“汽车拥有引擎”。
  • 聚合(Aggregation)动态的组合。

在创建新类时首先要考虑“组合”,因为它更简单灵活,而且设计更加清晰。等我们有一些编程经验后,一旦需要用到继承,就会明显意识到这一点。

 

6.继承

在创建了一个类之后,即使另一个新类与其具有相似的功能,你还是得重新创建一个新类。但我们若能利用现成的数据类型,对其进行“克隆”,再根据情况进行添加和修改,情况就显得理想多了。

继承应该只覆盖基类的方法(不应该添加基类中没有的方法)吗?

‘是一个’,‘像是一个’的关系

  • 圆是一个形状
  • 热力泵就像是一个(is-like-a)空调

圆是一个形状,定义一个形状类,圆继承形状(替代原则),当你看到替代原则时,很容易会认为替代原则是唯一可行的方式,并且使用替代原则的设计是很好的。但有些时候(热力泵就像是一个空调),你会发现必须得在派生(扩展)类中添加新方法(提供新的接口)。只要仔细审视,你可以很明显地区分两种设计方式的使用场合。

 

7.多态

我们在处理类的层次结构时,通常把一个对象看成是它所属的基类,而不是把它当成具体类。通过这种方式,我们可以编写出不局限于特定类型的代码。

多态是同一个行为具有多个不同表现形式形态能力

多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:

多态性是对象多种表现形式的体现。

多态的优点

  • 1. 消除类型之间的耦合关系
  • 2. 可替换性
  • 3. 可扩充性
  • 4. 接口性
  • 5. 灵活性
  • 6. 简化性

多态存在的三个必要条件

  • 继承
  • 重写
  • 父类引用指向子类对象

 

8.单继承结构

由于所有对象都具有一个公共接口,因此它们最终都属于同一个基类。(除 C++ 以外的几乎所有OOP语言中都是这样)

 

9.集合:

List,常用于保存序列;Map,也称为关联数组,常用于将对象与其他对象关联;Set,只能保存非重复的值;其他还包括如队列(Queue)、树(Tree)、栈(Stack)、堆(Heap)等等。

参数化类型机制可以使得编译器能够自动识别某个 class 的具体类型并正确地执行。举个例子,对集合的参数化类型机制可以让集合仅接受“形状”这种类型的元素,并以“形状”类型取出元素。Java 5 版本支持了参数化类型机制,称之为“泛型”(Generic)。泛型是 Java 5 的主要特性之一。你可以按以下方式向 ArrayList 中添加 Shape(形状):

ArrayList<Shape> shapes = new ArrayList<>();

泛型的应用,让 Java 的许多标准库和组件都发生了改变。在本书的代码示例中,你也会经常看到泛型的身影。

 

10.对象创建于生命周期

Java 使用动态内存分配。每次创建对象时,使用 new 关键字构建该对象的动态实例。这又带来另一个问题:对象的生命周期。较之堆内存,在栈内存中创建对象,编译器能够确定该对象的生命周期并自动销毁它;然而如果你在堆内存创建对象的话,编译器是不知道它的生命周期的。在 C++ 中你必须以编程方式确定何时销毁对象,否则可能导致内存泄漏。Java 的内存管理是建立在垃圾收集器上的,它能自动发现对象不再被使用并释放内存。垃圾收集器的存在带来了极大的便利,它减少了我们之前必须要跟踪的问题和编写相关代码的数量。因此,垃圾收集器提供了更高级别的保险,以防止潜在的内存泄漏问题,这个问题使得许多 C++ 项目没落。

 

11.异常处理

Java 的异常处理机制在编程语言中脱颖而出。Java 从一开始就内置了异常处理,因此你不得不使用它。这是 Java 语言唯一接受的错误报告方法。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值