《Thinking in Java》纪要

第一章 对象导论

1.1抽象过程

所有编程语言都是在提供对问题的抽象。汇编语言是对底层机器的抽象;命令式语言(如c)更加高级,但是它们的抽象仍旧基于计算机的结构;面向对象提供了表示“问题空间”元素的能力,可以基于问题进行抽象,而不是计算机。

面向对象的特点:

  1. 万物皆为对象
  2. 程序是对象的集合,它们通过发送消息告知彼此所要做的(即java中方法)。
  3. 每个对象都有由其他对象所构成的存储(即java中成员变量)。
  4. 每个对象都拥有其类型(即java中class)。
  5. 某一个特定类型的对象可以接受同样的消息(即同class)。

1.2 每个对象都有一个接口

类是描述具有相同特性和行为的对象集合。面向对象编程的过程,是为问题空间的元素和解空间的元素创建一一映射。
基于对象的特点来说
接口确定了某一个对象可以发送的请求,或者可以说成某一个对象具有的行为。

1.3 每个对象都提供服务

基于设计者的角度来说
将对象看作“服务提供者”。设计程序的过程,即考虑怎样创建提供理想服务的一系列对象。

1.4 被隐藏的具体实现

一个完整的程序(如点餐)可能需要基于多套服务(如定位,图片加载框架等)。
在设计类的时候,要从一个服务提供者的角度,考虑哪些接口是需要对外暴露的,哪些是需要隐藏的。

1.5 复用具体实现

代码复用方式

  1. 组合
  2. 聚合(动态发生的组合)
  3. 继承

组合比继承更灵活

1.6 继承

导出类和基类具有相同接口,导出类可以新增接口,也可以覆盖(override)基类的接口。

1.7 多态

实现方式:后期绑定

1.8 单根继承结构

1.9 容器

  1. 不同容器提供不同接口和外部行为;
  2. 不同容器对于某些操作具有不同效率。

1.9.1 参数化类型

泛型

1.10 对象的创建和生命期

垃圾回收机制

1.11 异常处理:处理错误

1.12并发编程

第二章 一切都是对象

  1. 引用
  2. new

存储到哪里
1). 寄存器
2). 堆栈 - 对象引用和基本类型存在堆栈中。java编译器需要知道堆>栈中所有元素的生命周期。
3). 堆 - 对象实体存在堆中
4). 常量池
5). 磁盘存储

  1. 基本类型
    boolean char byte short int long float double void
    BigInteger
    BingDecimal
  2. 数组
    基本类型数组
    引用类型数组
  3. 作用域
  4. 创建新的数据类型: 类
    成员变量和方法
    成员变量默认值
    “局部变量”没有默认值
  5. 方法,参数和返回值
    参数列表
  6. import
  7. static
  8. 编译和运行
  9. 注释
    @see等

第三章 操作符

  1. 操作符
    +,-,*,/,== ,=
  2. 优先级
  3. 赋值
    引用赋值
  4. i++,++i
  5. == 比较的是对象的引用,覆盖equals
  6. &&,||是短路操作符
  7. 直接常量
    十六进制:0x
    八进制:0
    float:F
    long;L
    指数计数:e
  8. 按位操作符 & | ~ ^
  9. 移位操作符 >>, << ,>>> ,<<<
  10. 三元操作符 ?:
  11. 字符串操作符 + +=
  12. java中的位数溢出

第四章 控制执行流程

第五章 初始化与清理

  1. 构造器
  2. 重载
  3. 默认构造器
  4. this关键字
  5. 清理 finalize()
    finalize的一个用法:回收对象前检查状态,抛出异常

常见垃圾回收机制

  1. 引用计数 - 缺陷:循环引用;
  2. "活对象查找存留" - 自适应“停止-复制” + “标记-清扫” + “分代”
    从堆栈和静态存储区出发,遍历引用,找到存活的对象;
  1. 初始化

初始化顺序
1). 查找 .class文件
2). 加载.class(创建class对象),进行静态初始化
3). 用new创建对象时,在堆上为对象分配足够的空间
4). 将分配的空间清零,初始化成员变量为默认值
5). 初始化基类非静态部分
6). 按照申明顺序初始化成员变量
7). 非静态代码块
8). 构造器

第六章 访问权限控制

第七章 复用类

  1. 方式:组合,继承
  2. final关键字的作用

第八章 多态

  1. 后期绑定
  2. 用多态进行程序设计

第九章 接口

  1. 接口多实现(同名方法)
  2. 策略模式
  3. 嵌套接口

第十章 内部类

  1. 内部类持有外部类引用
  2. .this和.new
  3. 静态内部类->嵌套类
  4. 为什么需要内部类
    多继承
    语法上没有is-a的歧义
  5. 闭包
    闭包是一个可调用的对象,记录类创建它的作用域的一些信息。
    内部类是面向对象的闭包。
  6. 内部类的继承
    导出类的构造器携带参数外部类enclosingClassReference
    必须在导出类构造器中调用enclosingClassReference.super()

第十一章 持有对象

  1. Collection,Map
  2. ArrayList,LinkedList
  3. TreeSet(红黑树),HashSet(散列),LinkedHashSet(散列+链表)
  4. TreeMap,HashMap,LinkedHashMap
  5. Stack,Queue,PriorityQueue

第十二章 异常处理

  1. 将“描述正常执行过程中做什么事”和“发生问题怎么办”的代码隔离开。
  2. try-catch-finally
  3. 编译时异常,Error,RuntimeException
  4. 异常链,嵌套异常
  5. 覆写方法时候,只能抛出基类方法申明的异常
  6. 构造器中发生异常,finally不一定起作用

第十三章 字符串

  1. String是不可变的对象
  2. +低效的原因:创建多个StringBuilder
  3. StringBuilder(非线程安全),StringBuffer(线程安全)
  4. Formatter
  5. 正则表达式
    java正则表达式的转义使用\,特殊字符表示也使用\,例如:

通常,\d表示数字,正则中\\d 匹配一位数字
通常,\\表示\,正则中\\\\ 匹配反斜线\
正则中换行\n\t不需要两个反斜线
(-|\\+)? 表示以一个加号或者减号开头

量词

贪婪型 所有量词
非贪婪型 量词后加问号
占有型(java特有) 量词后加加号

贪婪型 贪婪 占有
X? X?? X?+
X* X*? X*+
X+ X+? X++

X通常需要用圆括号扩起来

第十四章 类型信息

  1. RTTI:Run-Time Type Information
  2. Class对象
  3. 类加载器
  4. instance of
  5. 反射
  6. 动态代理 InvocatoinHandler

第十五章 泛型

  1. 定义泛型类,泛型方法
  2. 泛型擦除
  3. 在泛型代码内部,无法获得任何有关泛型参数类型的信息
  4. 泛型类型只在静态类型检查期间出现,之后被替换为非泛型上界
  5. 不能是实例化具有参数类型的数组
  6. 不能协变
  7. 通配符 <? extend T>
  8. 超类型通配符 <? super T>
  9. 无界通配符 <?>
  10. 指定上界(extend T)不能set->T;指定下界,get->obj
  11. 自限定类型
    Class SelfB<T extends SelfB<T>>

第十六章 数组

  1. 多维数组
  2. Arrays常用方法:
    deepEquals(), sort(), binarySearch(), fill()
    其他
    System.arraycopy()

第十七章 容器深入研究

  1. Collection/Map常用方法
  2. 数据结构
容器 原理 特点
HashMap 散列表 无序,查找快
LinkedHashMap 散列,链表 有序( 插入/LRU),迭代快
TreeMap 红黑树 有序(指定顺序)
  1. 散列码和散列函数
    计算散列码,散列码将被映射为下标(受容量和负载因子影响),Entry作为value,保存到数组中;为了解决散列冲突,数组中保存list(拉链法)
  2. 生成有意义的hashCode
  3. 负载因子 = size()/容量
  4. 持有引用
    SoftRefenence,WeakRefenence,PhantomRefenence

第十八章 I/O系统

第十九章 枚举类型

  1. 定义枚举
  2. 枚举实际都继承自java.lang.Enum
  3. values()方法是由编译器添加的静态方法
  4. 嵌套枚举
  5. EnumSet,EnumMap
  6. Enum内定义抽象方法,由具体枚举实现
  7. 多路分发

第二十章 注解

  1. 定义注解
  2. 元注解
  • Target: 作用域
  • Retention: 生命周期
  • Documented: 注解包含在javadoc中
  • Inherited: 允许子类继承父类的注解
  1. 编写注解处理器

第二十一章 并发

  1. “效率”,“阻塞”
  2. 定义Tread
  3. 共享资源
    所有对象自动含有单一的锁
    sychronized
    lock
    volatile
  4. 生命周期
    新建,就绪,阻塞,死亡
  5. 进入阻塞状态
  • sleep
  • wait
  • 阻塞式方法(io)
  • 等待锁
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容

  • 一、Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计...
    子非鱼_t_阅读 4,153评论 1 44
  • 314159
    小酌2016阅读 109评论 0 0
  • 坐在摩托后面,速度很快,因为是清晨天色蒙蒙亮,四周昏暗冷清,气温如风景一般。这辆摩托的诞生原因我爸的一个心血来潮,...
    里凯乐啊阅读 255评论 0 2