- Java核心技术 卷一 基础知识(原书第10版)
- 针对Java 8 编写
第1章 Java程序设计概述
- 11个关键术语
- 简单性
- 无需深奥的专业训练就可以进行编程的系统
- 面向对象
- 一个面向对象的木匠始终关注的是所制作的椅子,第二位才是所使用的工具
- 分布式
- 健壮性
- 安全性
- 体系结构中立
- 可移植性
- 解释性
- 高性能
- 多线程
- 动态性
- 简单性
第2章 Java程序设计环境
- NetBeans Oracle的集成开发环境
- 设置JDK
- 将jdk/bin目录增加到执行路径中---执行路径是操作系统查找可执行文件(exe)时所遍历的目录列表
- 体验一下在命令行编译、运行程序
- javac Welcome.java
- java Welcome
- 记住,Java区分大小写
- CLASSPATH:class字节码文件的路径,不用设置,默认就是当前文件夹,设置了后所有的class文件必须放在一起,反而不方便
第3章 Java的基本程序设计结构
-
源代码的文件名必须与公共类的名字相同
-
根据Java语言规范,main方法必须声明为public
-
.号用于调用方法,Java使用的通用语法是
- object.method(parameters)
-
三种注释
- 单行注释
- 多行注释
- 文档注释
-
8种基本数据类型
- 4种整型
- byte 1个字节 -128~127 用于底层的文件处理
- short 2个字节 -32768~32767
- int 4个字节 20亿 用的最多
- long 8个字节 天文数字
- 浮点类型
- float 4个字节
- double 8个字节
- char 强烈建议不要使用char类型,使用String类型
- Boolean
- 4种整型
-
final:表示这个变量只能被赋值一次
-
const是Java保留字,在Java中,必须使用final定义常量
-
枚举类型
- 有时候,变量的取值只在一个有限的集合内
-
不可变字符串String
- public final class String,不可变字符串的优点,编译器可以让字符串共享
- String类包含了50多个方法
- StringBuilder字符串构建器,前身是StringBuffer
-
null表示目前没有任何对象与该变量关联
-
0.1无法精确的用二进制表示
-
一旦创建了数组,就不能再改变它的大小,若要经常改变数组的大小,则应该使用ArrayList
第4章 对象与类
- 无论何时,只要向对象发送一个消息,它的状态就有可能发生改变
- 实现封装的关键在于绝对不能让类中的方法直接地访问其他类的实例域。
- 主力类(workhorse class)
- 通常,这些类没有main方法,却有自己的实例域和实例方法。要想创建一个完整的程序,应该将若干类组合在一起,其中只有一个类有main方法。
- 构造器总是伴随着new操作一起调用
- 隐式参数:关键字this表示隐式参数
- 凭经验可知,如果需要返回一个可变数据域的拷贝,就应该使用clone
- final关键字表示只有一次建立对象引用的机会,引用一旦建立就不可更改,但指向的对象可以更改
- 可以使用对象调用静态方法,不过,这种方式很容易造成混淆。
- 工厂方法:就是对构造方法的打包,可以具有不同的名字,多一层封装。
- 很多程序设计语言,特别是C提供了两种参数传递的方式,值调用和引用调用。Java只有值调用,没有引用调用(引用调用就是取地址&abc)。Java没有多重指针
- 方法的签名:名字+参数类型(返回值不属于方法签名)
- Ctrl + Shift + O 自动的导入依赖包
- 静态导入
- 导入静态的方法
- JAR文件使用ZIP格式组织文件和子目录
- 类路径(classpath)是所有包含类文件的路径的集合
- 类路径包括
- 基目录
- 当前目录(.)
- JAR文件
- 文档注释
- javadoc:它可以由源文件生成一个HTML文档
- 类设计技巧
- 一定要保证数据私有
- 一定要对数据初始化
- 不要在类中使用过多的基本类型
- 优先使用不可变的类
第5章 继承
-
阻止继承:final类和方法
-
大多数情况并不需要强制类型转换,因为动态绑定能够自动地找到相应的方法,只有使用子类特有的方法时才需要强制转换。
-
抽象类:人们只将它作为派生其他类的基类,而不作为想使用的实例类。让子类去实现
-
抽象类中可以有具体方法,但不建议这么做
-
Protected(子类访问权限)
- 一般用于方法,不用于域(用于域就破坏了封装)
- 最好的例子,就是object的clone方法
- protected 对本包和子类可见
-
深入理解编译时与运行时
-
Object类
- equals方法:默认就是比较引用(也就是地址值),这种比较没有意义,我们需要比较的是两个对象的状态。(不同是绝对的,相同是相对的)
- 自反性
- 对称性
- 传递性
- 一致性
- equals方法:默认就是比较引用(也就是地址值),这种比较没有意义,我们需要比较的是两个对象的状态。(不同是绝对的,相同是相对的)
-
hashCode方法
- 散列码:是由对象导出的一个整型值
-
toString方法
- 强烈建议为自定义的每一个类增加toString方法
-
数组列表:ArrayList
- 很遗憾,ArrayList并不是Java程序设计语言的一部分,它只是一个由某些人编写且被放在标准库中的一个实用类,所以不能使用[ ],而只能使用set get方法
-
枚举类
- public enum Size
-
反射
- 能够分析类能力的程序称为反射(reflective)
- 反射就是抽丝剥茧,将类的组成元素,再次分类,比如字段类(Field),方法类(Method),
第6章 接口、lambda表达式与内部类
-
接口(interface):这种技术主要用来描述类具有什么功能,而并不给出每个功能的具体实现。
-
接口不是类,而是对类的一组需求描述
-
可以将接口看成是没有实例域的抽象类,但是这两个概念还是有一定的区别
-
接口中所有的方法默认是public
-
接口变量必须引用实现了接口的类对象
-
接口与抽象类的区别:
- 接口可以多继承,而抽象类只能单继承
-
类优先原则,类中的方法,优先于接口中的方法
-
clone方法是Object的一个protected方法
-
lambda表达式
- lambda表达式是一个可传递的代码块,可以在以后执行一次或多次。
- 带参数变量的表达式就被称为lambda表达式
- 最好把lambda表达式看作是一个函数
- 在Java中,lambda表达式就是闭包
-
内部类
- 使用匿名内部类比较简短、更切实际、更易于理解,如今最好使用lambda表达式
-
代理
- Proxy,Clone这些都是高级技术,一般不用。
第7章 异常、断言和日志
- 如果出现了RuntimeException异常,那么就一定是你的问题
- 无论在try语句块中是否遇到异常,finally子句都会执行
- 归纳为:“早抛出,晚捕获”
- 断言是一种测试和调试阶段所使用的战术性工具
- 日志记录是一种在程序的整个生命周期都可以使用的策略性工具
- Java虚拟机只调用启动类的main方法
第8章 泛型程序设计
- 类型参数(type parameters)
- 通配符类型
第9章 集合
- 在实现方法时,选择不同的数据结构会导致其实现风格以及性能存在着很大差异。
- 这里,将跳过理论部分,仅介绍如何使用标准库中的集合类。
9.1 Java集合框架
- 本节将介绍Java集合框架的基本设计,展示使用它们的方法
9.1.1 将集合的接口与实现分离
- 队列的例子(先进先出):两种实现方式,一种数组,一种链表
- Abstract开头的类,是为类库实现者设计的。
9.1.2 Collection接口
- 单列集合根接口Collection
- Collection接口扩展了Iterable接口,因此,对于标准库中的任何集合都可以使用for each循环
- set(集)
- 链表不支持随机访问
- set方法不被视为链表的结构性修改
9.2.2 数组列表(ArrayList)
- List接口用于描述一个有序集合,并且集合中每个元素的位置十分重要。
- ArrayList封装了一个动态再分配的对象数组(自动扩容)
- Vector是线程安全的,效率低(目前已经不用了)
9.2.3 散列集(HashSet)
- 如果不在意元素的顺序,可以有几种能够快速查找元素的数据结构
- 散列码(hashCode):由对象的实例域产生的一个整数
- 散列表用链表数组实现,每个列表被称为桶(bucket)
- hashSet:它实现了基于散列表的集,只有不关心集合中元素的顺序时才应该使用hashSet
9.2.4 树集(TreeSet)
- 基于红黑树(red-black tree)实现
- 散列函数只是将对象适当地打乱存放,而比较却要精确地判别每个对象
9.2.5 队列与双端队列
9.2.6 优先级队列
- heap(堆):堆是一个可以自我调整的二叉树
9.3 映射
映射(Map):映射用来存放键值对,如果提供了键,就能够查找到值
9.3.1 基本映射操作
- Java类库为映射提供了两个通用的实现——这两个类都实现了Map接口
- HashMap——散列映射对键进行散列
- TreeMap——树映射用键的整体顺序对元素进行排序
9.3.2 更新映射项
- 处理映射时的一个难点就是更新映射项
9.3.3 映射视图
- getKey()
- getValue()
9.3.4 弱散列映射
9.3.5 链接散列集与映射
9.3.6 枚举集与映射
- EnumSet:是一个枚举类型元素集的高效实现。
9.3.7 标识散列映射
9.4 视图与包装器
9.4.1 轻量级集合包装器
9.4.2 子范围
9.4.3 不可修改的视图
- 视图只是包装了接口而不是实际的集合对象
网友评论