第一章 对象导论

“我们之所以将自然界分解,组织成各种概念,并按其含义分类,主要是因为我们是整个口语交流社会共同遵守的协定的参与者,这个协定以语言的形式固定下来……除非赞成这个协定中规定的有关语言信息的组织和分类,否则我们根本无法交谈。” ——Benjamin Lee Whorf(1897-1941)

1.1 抽象过程

对象具有状态、形为和标识。

  1. 万物皆为对象

  2. 程序是对象的集合,它们通过发送消息来告知彼此所要做的。

  3. 每个对象都有自己的由其他对象所构成的存储。

    (可以理解为通过创建包的方式创建新对象,因此可以构建复杂体系,并隐藏复杂性)

  4. 每个对象都拥有其类型。

  5. 某一特定类型的所有对象都可以接受同样的消息。

1.2 每一个对象都有一个接口

  必须有一种办法能向对象发出请求,使对象完成各种任务,比如完成一次交易、打开一个开关等等。每个对象都只能满足某些请求。这些请求由对象的“接口”(Interface)定义的,决定接口的便是类型。

  接口确定了对某一特定对象所能发出的请求。

1.3 每个对象都提供服务

1.4 被隐藏的具体实现

  第一个原因是防止程序员接触他们不该接触的东西——通常是内部数据类型的设计思想。

  第二个原因是允许库设计人员修改内部结构,不用担心它会对客户程序员造成什么影响。

  Java采用三个关键字来设置类边界:public,private,protected。“protected”(受保护的)与“private”相似,差别在于继承的类可访问protected成员,但不能访问private成员。

  Java还有一种默认的访问权限,被称为包访问权限,类可以访问在同一个包中的其他类成员,但在包之外这些成员同private一样。

1.5 复用的具体实现

  最简单地复用某个类的方式就是直接使用该类的对象。此外也可以将那个类的一个对象置于某个新的类。我们把这叫作“创建一个成员对象”。

  因为是使用现有的类合成新的类,所以称为组合,如果组合是动态发生的称为聚合。组合被视为“has-a”(拥有)关系,就像“汽车拥有引擎”。

1.6 继承

  在Java语言中,继承是通过extends关键字实现的,使用继承时,相当于创建了一个新类。这个新类不仅包含了现有类型的所有成员(尽管private成员被隐藏起来,且不能访问),但更重要的是,它复制了基类的接口。也就是说,所有可以发送给基类对象的消息同时也可以发送给导出类对象。根据可以发送的消息,我们能知道类的类型。这意味着导出类与基类具有相同的类型。

  有两种做法可将新得的导出类与原来的基础类区分开。

  第一种十分简单:为导出类添加新方法。

  第二种是改变现有基类方法的形为,被称之为覆盖。

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

  继承只覆盖基类的方法,导出类和基类是完全相同类型,称为is-a(是一个)关系。

  在导出类添加了新方法,基类无法访问新方法,称为is-like-a(像是一个)关系。

1.7 伴随多态的可互换对象

  面向对象设计语言使用了后期绑定的概念,当向对象发送消息时,被调用代码直到运行时才能确定。Java使用一小段特殊代码来代替绝对地址调用,使每一个对象都可以具有不同的行为表现。

  在Java中,动态绑定是默认形为,不需要添加额外的关键字实现多态。

  将导出类看做是它的基类的过程称为向上转型。

1.8 单根继承结构

  在Java中所有类都继承自单一的基类Object。

  1. 单根继承结构保证所有对象都具备某些功能。
  2. 单根继承结构使垃圾回收器的实现变得容易,因为所有对象都保证有其类型信息。

1.9 容器

1.9.1 参数化类型

  除非确切知道所要处理的对象的类型,否则向下转型几乎是不安全的。参数化类型就是一个编译器可以自动定制作用于特定类型上的类。例如使用参数化类型,编译器可以定制一个只接纳和取出Shape对象的容器。

  在Java中它称为泛型。

1.10 对象的创建和生命周期

  Java完全采用动态内存分配方式。每当想要创建新对象时,就要使用new关键字来构建此对象的动态实例。

  Java提供了被称为“垃圾回收器”的机制,它可以自动发现对象何时不再被使用,并继而销毁它。

1.11 异常处理:处理错误

  Java一开始就内置了异常处理,而且强制你必须使用它。

1.12 并发编程

  把问题切分成多个可独立运行的部分(任务),从而提高程序响应能力。这些彼此独立运行的部分称之为线程,上述概念称为“并发”。

  线程只是一种为单一处理器分配执行时间的手段。在语言级别上无需操心机器有几个处理器。

  有一个隐患:共享资源。如果有多个并行任务要访问同一项资源,就会出问题。因此共享资源必须在使用期间被锁定。某个任务锁定某项资源,完成其任务,然后释放资源,使其他任务可以使用这项资源。

《Java编程思想》

[Java编程思想] 第一章 对象导论的更多相关文章

  1. 学习java编程思想 第一章 对象导论

    一.面向对象的五个基本特性: 1.万物皆为对象.将对象视为奇特的变量,他可以存储数据,还可以要求它在自身上执行操作. 2.程序是对象的合集,他们通过发送消息告诉彼此所要做的. 3.每个对象都有自己的由 ...

  2. JAVA编程思想第一章——对象导论

  3. Java编程思想学习(一)----对象导论中多态的理解

    1.1抽象过程 1)万物皆对象. 2)程序是对象的集合,他们通过发送消息来告知彼此所要求做的. 3)每个对象都有自己的由其他对象所构成的存储. 4)每个对象都拥有其类型. 5)某一特定类型的所有对象都 ...

  4. JAVA 编程思想第一章习题

    //: ch1.01/IntChar.java package object; import java.util.*; public class IntChar { int x; char y; pu ...

  5. java编程思想第九章接口

    9.1抽象类和抽象方法 为什么要有抽象类? 是希望通过通用接口操作一系列类. 那么抽象类的形式是什么样的呢? 声明类的使用使用abstract关键字,且在该类中应该具有抽象方法. 注:抽象方法被关键字 ...

  6. 《Java编程思想》笔记 第一章 对象导论

    1.抽象过程 Q:什么是对象??? A:   1) 万物皆对象 --- 对象具有状态,行为和标识 2)程序是对象的集合,他们通过发送消息来告诉彼此要做的 3)通过创建包含现有对象的包的方式来创建新类型 ...

  7. Java编程思想读书笔记 第一章 对象导论

    抽象过程 纯粹的面向对象程序设计方式: 万物皆为对象: 对象可以存储数据,还可以在其自身执行操作 程序是对象的集合: 通过发送消息告诉彼此要做的 每个对象都有自己的由其它对象构成的存储:可以在程序中构 ...

  8. [Java编程思想] 第二章 一切都是对象

    第二章 一切都是对象 2.1 用引用操纵对象   创建一个String引用: String s;   这里所创建的只是引用,并不是对象.   创建一个引用的同时便初始化: String s = &qu ...

  9. think in java 第四版读书笔记 第一章对象导论

    很久没有碰过java了,为了项目需要以及以后找工作,还是有必要将think in java通读一遍.欢迎大家一起讨论学习 1.1抽象过程 面向对象语言的5个特性: 1.万物皆对象 任何事物都可以抽象为 ...

随机推荐

  1. 鸟哥的Linux学习笔记-bash

    1. /bin/bash是linux预设的shell,也是Linux发行版的标准shell,它兼容sh,可以看作是sh的功能加强. 2. bash具有命令记录功能,在bash中通过上下键就可以翻找之前 ...

  2. SQL性能优化技巧

    作者:IT王小二 博客:https://itwxe.com 这里就给小伙伴们带来工作中常用的一些 SQL 性能优化技巧总结,包括常见优化十经验.order by 与 group by 优化.分页查询优 ...

  3. rsync 与 inotify 的使用 & 实现实时同步备份

    今日内容 rsync 内容详细 上一篇内容问题 1.yum源问题 2.VPN链接正常,但是没办法通过172 3.VPN链接时,出现了DNS错误 4.掩码不对 5.openvpn开启错误 复制的命令 1 ...

  4. Note -「最大团-最小度不等式」

      这是什么奇怪的名字qwq. 一些定义   只为便于理解,没有苛求专业的定义. 简单无向图:不存在重边.自环的无向图. \(\delta(G)\):无向图 \(G\) 中结点的最小度数.即 \(\m ...

  5. Solution -「LOCAL」舟游

    \(\mathcal{Description}\)   \(n\) 中卡牌,每种三张.对于一次 \(m\) 连抽,前 \(m-1\) 次抽到第 \(i\) 种的概率是 \(p_i\),第 \(m\) ...

  6. 痞子衡嵌入式:对比MbedTLS算法库纯软件实现与i.MXRT上DCP,CAAM硬件加速器实现性能差异

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是MbedTLS算法库纯软件实现与i.MXRT上DCP,CAAM硬件加速器实现性能差异. 近期有 i.MXRT 客户在集成 OTA SBL ...

  7. 使用IWebBrowser2操控浏览器页面测试(IE)

      测试一下在IE浏览器界面中插入代码测试,采用寻找窗口的方式获取Internet Explorer_Server句柄.   写的时候参考了很多网上的资料,有些地方不大适用就稍微修改了一下. Send ...

  8. 详细介绍rar是什么由谁发明

    RAR是一种专利文件格式,用于数据紧缩与归档打包,开发者为尤金·罗谢尔(俄语:Евгений Лазаревич Рошал,拉丁转写:Yevgeny Lazarevich Roshal),RAR的全 ...

  9. 扫盲贴:2021 CSS 最冷门特性都是些啥?

    最近几年 CSS 界的大事之一是每年年底的 <State Of CSS>,也就是 CSS 现状调查,去年年底发布了<State Of CSS 2021>.其中关于特性这一章,会 ...

  10. hbuilderx快捷键、回到上一步、回到上次编辑处

    快捷键:Alt + 左/右箭头  其他快捷键: