美文网首页
《Thinking in Java》纪要

《Thinking in Java》纪要

作者: 麦崎 | 来源:发表于2018-09-09 13:29 被阅读0次

第一章 对象导论

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)
  • 等待锁

相关文章

  • 《Thinking in Java》纪要

    第一章 对象导论 1.1抽象过程 所有编程语言都是在提供对问题的抽象。汇编语言是对底层机器的抽象;命令式语言(如c...

  • Thinking in Java--初始化

    Thinking in Java(2)---初始化 ok,今天我看到在Thinking in java中的内容和大...

  • 1.Java相关书籍

    Thinking in Java Java轻松学 微服务设计 Java 8实战

  • Bruce Eckel:编程生涯(转载)

    说明:Bruce Eckel著有大名鼎鼎的《Thinking in C++》和《Thinking in Java》...

  • Bruce Eckel:编程生涯

    说明:Bruce Eckel 著有大名鼎鼎的《Thinking in C++》和《Thinking in Java...

  • 程序员必看的书单

    1~2年 Thinking in Java Effective Java Design Patterns 重构 改...

  • Java 基础

    Java 基础 Thinking, practice, not collections Java命名规范 4个原则...

  • Thinking in Java

    2. 一切都是对象 2.1 引用控制对象 引用:操纵的标识符是对象的一个引用String s; 2.2 必须由你创...

  • Thinking in Java

    1. 对象导论 1.1 抽象过程 面向对象的语言有五个特点万物皆为对象程序是对象的集合,它们通过发消息来通讯每个对...

  • Thinking in Java

    3. 操作符 3.1 静态导入 静态导入:方法中调用静态导入的其他类中的静态方法 3.2 使用Java操作符 副作...

网友评论

      本文标题:《Thinking in Java》纪要

      本文链接:https://www.haomeiwen.com/subject/qxkoiftx.html