《Java编程思想》读书笔记

第一章 对象导论

1.1 抽象过程
  • Smalltalk的五个基本特性
    • 万物皆为对象;
    • 程序是对象的集合,它们通过发送消息来告知彼此所要做的;可以把消息想象为对某个特定对象的方法的调用请求。
    • 每个对象都有自己的由其他对象所构成的存储;
    • 每个对象都拥有其类型;
    • 某一特定类型的所有对象都可以接收同样的消息。
  • Booch对于对象的描述
    • 对象具有状态、行为和标识。这意味着每个对象都可以拥有内部数据(它们给出了该对象的状态)和方法(它们产生行为),并且每一个对象都可以唯一的与其他对象区分开来,具体来说就是每一个对象在内存中都一个唯一的内存地址。
1.2 每个对象都有一个接口
  • 因为类描述了具有相同特性(数据元素)和行为(功能)的对象集合,所以一个类实际上是一个数据类型,例如所有浮点类型数字具有相同的特性和行为集合。二者的差异在于,程序员通过定义类来适应问题,而不再被迫只能使用现有的用来表示机器中的存储单元的数据类型。可以根据需求,通过添加新的数据类型来扩展编程语言。编程系统欣然接受新的类,并且像对待内置类型那样的找管它们和进行类型检查。
1.3 每个对象都提供服务
  • 当正在试图开发和理解一个程序设计时,最好的办法之一就是将对象想象为『服务提供者』。
  • 在良好的面向对象设计中,每个对象都可以很好的完成一项任务,但是它并不试图做更多的事情。
1.4 被隐藏的具体实现
  • 被隐藏的部分通常代表对象内部脆弱的部分,它们很容易被粗心的或不知内情的客户端程序员(使用类的人)所毁坏,因此将实现隐藏起来可以减少程序bug。
  • 访问控制存在的第一个原因是让客户端程序员无法触及他们不应该触及的部分,这部分数据对数据类型的内部操作来说是必需的,但并不是用户解决特定问题所需的接口的一部分。
  • 访问控制存在的第二个原因是允许类设计者可以改变类内部的工作方式而不用担心会影响到客户端程序员。
  • public、private、protected和包访问权限
    在这里插入图片描述
1.5 复用具体实现
  • 代码复用是面向对象程序设计语言所提供的最了不起的优点之一。
  • 复用某个类的方法:
    • 直接使用该类的一个对象
    • 可以将类的一个对象置于某个新的类中,即创建一个成员对象。
  • 『组合』:使用现有的类来合成新的类。
  • 聚合:如果组合是动态发生的,那么被称为聚合。
  • 继承 VS 组合:
    • 组合可以在程序运行时修改成员对象,以实现动态修改程序的目的。
    • 继承并不具备这样的灵活性,因为编译器必须对通过继承而创建的类施加编译时的限制。
    • 在建立新类时,应该首先考虑『组合』,因为它更加简单灵活,而不是处处使用继承。
1.6 『是一个』和『像是一个』的关系
  • is-a:继承只覆盖基类的方法,可以用一个导出类对象来替代一个基类对象,纯粹替代。
  • is-like-a:导出类型中添加了新的接口元素,这种替代并不完美,使基类无法访问新添加的方法。
1.7 伴随多态的可互换对象
  • 一个非面向对象编程的编译器产生的函数调用会引起所谓的前期绑定。这么做意味着编译器将产生一个具体函数名字的调用,而运行时将这个调用解析到将要被执行的代码的绝对地址。然而在OOP中,程序直到运行时才能够确定代码的地址,所以当消息发送到一个泛化对象时,必须才用其他的机制。
  • 面向对象程序设计语言才用了后期绑定的概念。当向对象发送消息时,被调用的代码直到运行时才能确定。编译器确保被调用方法的存在,并对调用参数和返回值执行类型检查,但是并不知道将被执行的确切代码。为了执行后期绑定,Java使用一小段代码来替代绝对地址调用,这段代码使用在对象中存储的信息来计算方法体的地址。这样,根据这一小段代码的内容,每一个对象都可以具有不同的行为表现。
1.9 参数化类型
  • 参数化类型就是编译器可以自动定制作用于特定类型上的类,在Java中,它被称为『范型』。
1.10 对象的创建和生命期
  • 在堆分配存储空间,要远远大于在堆栈中创建存储空间的时间。在堆栈中分配和释放存储空间通常只需要一条汇编指令即可,分别对应将栈顶指针向下或向上移动,而创建堆存储空间的时间依赖于存储机制的设计。
  • 对于允许在堆栈上创建对象的语言,编译器可以确定对象存活的时间,并可以自动销毁它;如果是在堆上创建对象,编译器将对它的生命周期一无所知。
  • Java提供了『垃圾回收器』机制,它可以自动发现对象何时不再被使用,并继而销毁它,它减少了所必须考虑的议题和必须减少的代码。
  • Java的『垃圾回收器』机制,同所有对象都是继承自单根基类Object以及只能以一种方式创建对象(在堆上创建)这两个特性结合起来,使得Java编程更加简单。

第二章 一切都是对象

2.1 用引用操纵对象
  • Java通过引用来改变对象
2.2 必须由你创建所有对象
2.1 存储到什么地方

在这里插入图片描述在这里插入图片描述

2.2 特例:基本类型
  • 对于基本类型,Java不用new来创建变量,而是创建个并非是引用的『自动』变量,这个变量直接存储值,并置于堆栈中,因此更加高效。
  • Java中的每种基本类型所占存储空间的大小是固定的,不会随机器硬件架构的变化而变化。这个特性是Java具有可移植性的原因之一。
2.3 永远不要销毁对象
2.3.2 对象的作用域
  • Java有一个垃圾回收器,用来监视用new创建的所有对象,并辨别那些不会再被引用的对象。随后释放这些对象的内存空间,以便供其他新的对象引用。
2.4 创建新的数据类型:类
2.4.1 字段和方法
  • 在Java中你所做的全部工作就是定义类,产生那些类的对象,以及发送消息给这些对象。
  • 当变量作为类的成员使用时,Java才确保给定其默认值,以确保那些类型是基本类型的成员变量得到初始化,防止产生程序错误。然而并不适用于局部变量。
方法、参数和返回值
2.5.1 参数列表
  • 在Java中任何传递参数的场合一样,实际上传递的是引用。对于前面提到的特殊类型是一个意外:boolean、char、byte、short、int、long、float、double。

第三章 操作符

3.4 赋值
  • 对基本类型的赋值:基本类型存储了实际的数值,而并非指向一个对象的引用,所以在为其赋值的时候,是直接将一个地方的内容复制到了另一个地方。例如:a = b,那么b的内容就复制给了a,若接着修改了a,而b根本不会受这种修改的影响。
  • 对对象类型的赋值:对一个对象进行赋值操作时,我们真正操作的是对对象的引用。将一个对象赋值给另一个对象,实际是将引用从一个地方复制到另一个地方。例如:c = d,那么c和d都指向原本只有d指向的那个对象。
3.15 类型转换操作符
  • 在这里插入图片描述

第七章 复用类

  • 代码复用的两种形式:
    • 组合:在新类中产生现有类的对象,即新的类是由现有类组成的 ,『has-a』
    • 继承:按照现有类的类型创建新类,『is-a』
7.2 继承语法
  • 为了继承,一般的规则是将所有的数据成员都指定为private,将所有的方法指定为public。
7.4 结合使用组合和继承
  • 在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值