《Java核心技术 卷I 》读书笔记

2019-02-26  本文已影响0人  专修虚拟机

前言

不定期更新
时间:2019-02-26 (事件:上传目录)

第1章 Java程序设计概述

1.1 Java程序设计平台

java是一个完整的平台,有一个庞大的库,其中包含了很多可重用的代码和一个提供诸如安全性、跨操作系统的可移植性以及自动垃圾收集等服务的执行环境。

1.2 Java“白皮书”的关键术语
1.2.1 简单性

简单性是指java相比较c++等语言,简化了很多;另一方面是指java的目标之一是支持开发能在小型机器上独立运行的软件,现在JME用于开发嵌入式设备。

1.2.2 面向对象

简单讲面向对象是一种程序设计技术。

1.2.3 分布式、网络技能

java的类库提供了强大的网络能力,而且易于使用。人们可以便捷的通过URL打开和访问网络上的对象。

1.2.4 健壮性

java的设计目标之一就是在于使得java编写的程序具有多方面的的可靠性。健壮性保证的方法:早期的问题检测,后期动态的(运行时)检测;java采用的指针模型可以消除重写内存和损坏数据可能性。

1.2.5 安全性

java适用于网络/分布式环境。为了达成这个目标,java被设计成能防范各种攻击,包括运行时堆栈溢出,在自己的处理空间之外破坏内存,未经授权读写文件。

1.2.6 体系结构中立

编译器生成一个体系结构中立的目标文件格式,这是一中编译过的代码。只要有java运行的环境,就可以在许多处理器上运行。

1.2.7 可移植性

和c/c++不同java没有“依赖具体实现”的地方,基本数据类型的大小以及相关运算都做了明确的说明

1.2.8 解释型
1.2.9 高性能
1.2.10 多线程

java把多线程的实现交给了底层的操作系统或线程库来完成。

1.2.11 动态性

动态性,一是程序能够适应不断发展的环境,二是添加代码到正在运行的程序中

1.3 Java applet与Internet
1.4 Java发展简史
1.5 关于Java的常见误解

第2章 Java程序设计环境

2.1 安装Java开发工具包
2.1.1 下载JDK
2.1.2 设置JDK
2.1.3 安装库源文件和文档
2.2 使用命令行工具
2.3 使用集成开发环境
2.4 运行图形化应用程序
2.5 构建并运行applet

第3章 Java的基本程序设计结构

3.1 一个简单的Java应用程序
public class FirstSample{
    public static void main(Stirng[] args){
        System.out.println("Hello,World!");
    }
}

一个类可以有多个class,但是公共类(使用public修饰的)只能有一个,且公共类的名字和源代码的文件名一样

3.2 注释
3.3 数据类型

Java是一种强类型语言,所以必须为每一个变量声明一种类型。在Java中一共有8种基本类型,其中有4种整型、2种浮点类型、一种用于表示Unicode编码的字符单元的字符类型char和1种用于表示真值的boolean类型。

3.3.1 整型
类型                    存储需求                            取值范围
int                      4字节                            -21亿~21亿
short                    2字节                           -32768~32767
long                     8字节             -9223372036854775808~9223372036854775807
byte                     1字节                             -128~127
3.3.2 浮点类型
3.3.3 char类型
3.3.4 Unicode和char类型
3.3.5 boolean类型
3.4 变量
3.4.1 变量初始化
3.4.2 常量
3.5 运算符
3.5.1 数学函数与常量
3.5.2 数值类型之间的转换
3.5.3 强制类型转换
3.5.4 结合赋值和运算符
3.5.5 自增与自减运算符
3.5.6 关系和boolean运算符
3.5.7 位运算符
3.5.8 括号与运算符级别
3.5.9 枚举类型
3.6 字符串
3.6.1 子串
3.6.2 拼接
3.6.3 不可变字符串
3.6.4 检测字符串是否相等
3.6.5 空串与Null串
3.6.6 码点与代码单元
3.6.7 String API
3.6.8 阅读联机API文档
3.6.9 构建字符串
3.7 输入输出
3.7.1 读取输入
3.7.2 格式化输出
3.7.3 文件输入与输出
3.8 控制流程
3.8.1 块作用域

语法:{……}

3.8.2 条件语句
3.8.3 循环
While(){

}
Do{
}
While()
3.8.4 确定循环
for(){
}
3.8.5 多重选择:switch语句
switch(){case 1:return ; }
3.8.6 中断控制流程语句
3.9 大数值

BigInteger和BigDecimal

3.10 数组

数组是一种数据结构,用来存储同一类型值得集合。语法:int[] a=new int[100];
创建一个数字数组时,所有元素都初始化为0,boolean数组的元素会初始化为false.对象数组的元素初始化为一个特殊的值null,

3.10.1 for each循环

Java有一种很强的循环结构:for(T variable : collection){},会顺序遍历完所有元素,如果需要操作下标,则需要传统型的for循环。

3.10.2 数组初始化以及匿名数组
 class arrays{
    void arrayInit(){
    int [] ss={1,2,3,4,1};//初始化
    //匿名类
    arrayTest1(new int[]{1,1,2,3,4,2});//匿名第一种情况
    arrayTest2(1,1,2,3,4,2)//匿名第二种情况
    }
    void arrayTest1(int[] s){
     }
    void arrayTest2(int…s){
    }
}
3.10.3 数组拷贝

使用Arrays.copyOf()方法完成拷贝;如果长度小于原始数组长度,则只拷贝最前面的数据元素。

3.10.4 命令行参数

每一个java应用程序都有一个带String[] arg参数的main方法。这个参数表明main方法将接收一个字符串数组,也就是命令行参数。

3.10.5 数组排序

使用Arrays.sort()方法来做排序。

3.10.6 多维数组

跳过

3.10.7 不规则数组

二维数组,也就是,数组中的数组。

第4章 对象与类

4.1 面向对象程序设计概述

传统的结构化程序设计通过设计一系列的过程(即算法)来解决问题。一旦确定了这些过程,就要开始考虑存储数据的方式。也即算法+数据结构=程序,首先要确定如何操作数据,然后再决定如何组织数据,以便于操作数据。而面向对象程序设计却是将数据放在第一位(数据建模),然后再考虑如何去操作数据的算法。
这种先将数据分类的方式,可以在程序出错的时候可以,很便捷的确定出错的数据在哪里。

4.1.1 类

类是构造对象的模板或者蓝图。封装是将数据和行为结合在一个包中。实现封装的关键在于绝对不能让类中的方法直接访问其他类的实例域。程序仅通过对象的方法对对象的数据进行交互。

4.1.2 对象

OOP的三个特征
对象的行为
对象的状态
对象的标识

4.1.3 识别类

就是怎么创建一个类

4.1.4 类之间的关系

依赖:A类会调用B类的方法来完成自己业务。
聚合:A类的对象包含B类的对象
继承:A类继承B类,也就是说A是B的扩展,A类继承了B类的所有的方法,并且A类有更多B类没有的方法。

4.2 使用预定义类
4.2.1 对象与对象变量
4.2.2 Java类库中的LocalDate类
4.2.3 更改器方法与访问器方法
4.3 用户自定义类
4.3.1 Employee类
4.3.2 多个源文件的使用
4.3.3 剖析Employee类
4.3.4 从构造器开始
4.3.5 隐式参数与显式参数
4.3.6 封装的优点
4.3.7 基于类的访问权限
4.3.8 私有方法
4.3.9 f?inal实例域
4.4 静态域与静态方法
4.4.1 静态域
4.4.2 静态常量
4.4.3 静态方法
4.4.4 工厂方法
4.4.5 main方法
4.5 方法参数
4.6 对象构造
4.6.1 重载
4.6.2 默认域初始化
4.6.3 无参数的构造器
4.6.4 显式域初始化
4.6.5 参数名
4.6.6 调用另一个构造器
4.6.7 初始化块
4.6.8 对象析构与f?inalize方法
4.7 包
4.7.1 类的导入
4.7.2 静态导入
4.7.3 将类放入包中
4.7.4 包作用域
4.8 类路径
4.8.1 设置类路径 139
4.9 文档注释 140
4.9.1 注释的插入 140
4.9.2 类注释 140
4.9.3 方法注释 141
4.9.4 域注释 142
4.9.5 通用注释 142
4.9.6 包与概述注释 143
4.9.7 注释的抽取 143
4.10 类设计技巧 144

第5章 继承 147

5.1 类、超类和子类 147
5.1.1 定义子类 147
5.1.2 覆盖方法 149
5.1.3 子类构造器 150
5.1.4 继承层次 153
5.1.5 多态 154
5.1.6 理解方法调用 155
5.1.7 阻止继承:f?inal类和方法 157
5.1.8 强制类型转换 158
5.1.9 抽象类 160
5.1.10 受保护访问 165
5.2 Object:所有类的超类 166
5.2.1 equals方法 166
5.2.2 相等测试与继承 167
5.2.3 hashCode方法 170
5.2.4 toString方法 172
5.3 泛型数组列表 178
5.3.1 访问数组列表元素 180
5.3.2 类型化与原始数组列表的兼容性 183
5.4 对象包装器与自动装箱 184
5.5 参数数量可变的方法 187
5.6 枚举类 188
5.7 反射 190
5.7.1 Class类 190
5.7.2 捕获异常 192
5.7.3 利用反射分析类的能力 194
5.7.4 在运行时使用反射分析对象 198
5.7.5 使用反射编写泛型数组代码 202
5.7.6 调用任意方法 205
5.8 继承的设计技巧 208
第6章 接口、lambda表达式与内部类 211
6.1 接口 211
6.1.1 接口概念 211
6.1.2 接口的特性 217
6.1.3 接口与抽象类 218
6.1.4 静态方法 218
6.1.5 默认方法 219
6.1.6 解决默认方法冲突 220
6.2 接口示例 222
6.2.1 接口与回调 222
6.2.2 Comparator接口 224
6.2.3 对象克隆 225
6.3 lambda表达式 231
6.3.1 为什么引入lambda表达式 231
6.3.2 lambda表达式的语法 232
6.3.3 函数式接口 234
6.3.4 方法引用 235
6.3.5 构造器引用 237
6.3.6 变量作用域 237
6.3.7 处理lambda表达式 239
6.3.8 再谈Comparator 242
6.4 内部类 242
6.4.1 使用内部类访问对象状态 244
6.4.2 内部类的特殊语法规则 247
6.4.3 内部类是否有用、必要和安全 248
6.4.4 局部内部类 250
6.4.5 由外部方法访问变量 250
6.4.6 匿名内部类 252
6.4.7 静态内部类 255
6.5 代理 258
6.5.1 何时使用代理 259
6.5.2 创建代理对象 259
6.5.3 代理类的特性 262
第7章 异常、断言和日志 264
7.1 处理错误 264
7.1.1 异常分类 265
7.1.2 声明受查异常 267
7.1.3 如何抛出异常 269
7.1.4 创建异常类 270
7.2 捕获异常 271
7.2.1 捕获异常 271
7.2.2 捕获多个异常 273
7.2.3 再次抛出异常与异常链 274
7.2.4 f?inally子句 275
7.2.5 带资源的try语句 278
7.2.6 分析堆栈轨迹元素 280
7.3 使用异常机制的技巧 282
7.4 使用断言 285
7.4.1 断言的概念 285
7.4.2 启用和禁用断言 286
7.4.3 使用断言完成参数检查 287
7.4.4 为文档假设使用断言 288
7.5 记录日志 289
7.5.1 基本日志 289
7.5.2 高级日志 289
7.5.3 修改日志管理器配置 291
7.5.4 本地化 292
7.5.5 处理器 293
7.5.6 过滤器 296
7.5.7 格式化器 296
7.5.8 日志记录说明 296
7.6 调试技巧 304

第8章 泛型程序设计

8.1 为什么要使用泛型程序设计

8.1.1 类型参数的好处 309
8.1.2 谁想成为泛型程序员 310
8.2 定义简单泛型类 311
8.3 泛型方法 313
8.4 类型变量的限定 314
8.5 泛型代码和虚拟机 316
8.5.1 类型擦除 316
8.5.2 翻译泛型表达式 317
8.5.3 翻译泛型方法 318
8.5.4 调用遗留代码 319
8.6 约束与局限性 320
8.6.1 不能用基本类型实例化类型参数 320
8.6.2 运行时类型查询只适用于原始类型 321
8.6.3 不能创建参数化类型的数组 321
8.6.4 Varargs警告 322
8.6.5 不能实例化类型变量 323
8.6.6 不能构造泛型数组 323
8.6.7 泛型类的静态上下文中类型变量无效 325
8.6.8 不能抛出或捕获泛型类的实例 325
8.6.9 可以消除对受查异常的检查 326
8.6.10 注意擦除后的冲突 327
8.7 泛型类型的继承规则 328
8.8 通配符类型 330
8.8.1 通配符概念 330
8.8.2 通配符的超类型限定 331
8.8.3 无限定通配符 334
8.8.4 通配符捕获 334
8.9 反射和泛型 337
8.9.1 泛型Class类 337
8.9.2 使用Class参数进行类型匹配 338
8.9.3 虚拟机中的泛型类型信息 338
第9章 集合 344
9.1 Java集合框架 344
9.1.1 将集合的接口与实现分离 344
9.1.2 Collection接口 346
9.1.3 迭代器 347
9.1.4 泛型实用方法 349
9.1.5 集合框架中的接口 352
9.2 具体的集合 353
9.2.1 链表 355
9.2.2 数组列表 362
9.2.3 散列集 363
9.2.4 树集 366
9.2.5 队列与双端队列 369
9.2.6 优先级队列 371
9.3 映射 372
9.3.1 基本映射操作 372
9.3.2 更新映射项 375
9.3.3 映射视图 376
9.3.4 弱散列映射 377
9.3.5 链接散列集与映射 378
9.3.6 枚举集与映射 379
9.3.7 标识散列映射 380
9.4 视图与包装器 381
9.4.1 轻量级集合包装器 382
9.4.2 子范围 382
9.4.3 不可修改的视图 383
9.4.4 同步视图 384
9.4.5 受查视图 384
9.4.6 关于可选操作的说明 385
9.5 算法 388
9.5.1 排序与混排 389
9.5.2 二分查找 391
9.5.3 简单算法 392
9.5.4 批操作 394
9.5.5 集合与数组的转换 394
9.5.6 编写自己的算法 395
9.6 遗留的集合 396
9.6.1 Hashtable类 397
9.6.2 枚举 397
9.6.3 属性映射 398
9.6.4 栈 399
9.6.5 位集 399
第10章 图形程序设计 403
10.1 Swing概述 403
10.2 创建框架 407
10.3 框架定位 409
10.3.1 框架属性 411
10.3.2 确定合适的框架大小 411
10.4 在组件中显示信息 415
10.5 处理2D图形 419
10.6 使用颜色 426
10.7 文本使用特殊字体 429
10.8 显示图像 435
第11章 事件处理 439
11.1 事件处理基础 439
11.1.1 实例:处理按钮点击事件 441
11.1.2 简洁地指定监听器 445
11.1.3 实例:改变观感 447
11.1.4 适配器类 450
11.2 动作 453
11.3 鼠标事件 459
11.4 AWT事件继承层次 465
11.4.1 语义事件和底层事件 466
第12章 Swing用户界面组件 469
12.1 Swing和模型–视图–控制器设计模式 469
12.2 布局管理概述 474
12.3 文本输入 481
12.4 选择组件 488
12.5 菜单 504
12.6 复杂的布局管理 518
12.7 对话框 541
12.8 GUI程序排错 573
第13章 部署Java应用程序 580
13.1 JAR文件 580
13.2 应用首选项的存储 586
13.3 服务加载器 596
13.4 applet 598
13.5 Java Web Start 614
第14章 并发 624
14.1 什么是线程 624
14.2 中断线程 632
14.3 线程状态 635
14.4 线程属性 638
14.5 同步 640
14.6 阻塞队列 668
14.7 线程安全的集合 673
14.8 Callable与Future 681
14.9 执行器 685
14.10 同步器 696
14.11 线程与Swing 698
附录A Java关键字 710

上一篇下一篇

猜你喜欢

热点阅读