第1章 对象导论
1. 抽象过程(经典面向对象语言Smalltalk)
2. 每个对象都有一个接口
3. 每个对象都提供服务
4. 具体实现隐藏(Java通过关键字public, private, protected在类的内部设定边界)
5. 通过复用实现组合(has-a关系)
6. 继承关系(is-a关系)
由于基类和导出类具有相同的基础接口,所以伴随此接口的设定必定有些具体实现
两种方法,第一种,直接在导出类中添加新方法;第二种, 同名方法的覆盖overriding)
7. 伴随多态的可互换对象 (后期绑定)
一个非面向对象编程的编译器产生的函数调用会引起所谓的前期绑定,这么做意味着编译器将产生对一个具体函数名字的调用,
而运行时将这个调用解析到将要被执行的代码的绝对地址)。然而在OOP中,程序知道运行时才能够确定代码的地址.
为了执行后期绑定,Java使用一小段特殊的代码来替代绝对地址的调用。这段代码使用在对象中存储的信息来计算方法体的地址。
在某些语言中,必须明确地声明希望某个方法具备后期绑定属性所带来的灵活性(C++是使用virtual关键字来实现的)。在这些语言中,
方法在默认情况下不是动态绑定的。而在Java中,动态绑定是默认行为,不需要添加额外的关键字来实现多态。
将导出类看作是它的基类的过程称为向上转型(upcasting),这也是实现的多态的基础
8. 单根继承结构
Java中所有类都最终继承自单一的基类,好处:1.对象容易在堆上创建,简化参数传递 2. 使垃圾回收器的实现变得容易很多
9. 容器(collections,集合类)
10. 对象的创建和生命期(栈和堆上创建对象,垃圾回收)
11. 异常处理和并发编程
12. Java与Internet(applet等)
第2章 一切都是对象
1. 用引用操纵对象(引用·更像是一个句柄handle)
2. 必须由你创建所有对象
数据存储的地方
1. 寄存器
2. 堆栈(RAM区,堆栈指针的操作很快,Java的对象引用放在其中,但是对象不在堆栈)
3. 堆(RAM区,内存分配灵活,但是存储分配和清理需要更多的耗时)
4. 常量存储(常量值通常直接存放在程序代码内部)
5. 非RAM存储(持久化)
Java基本类型
基本类型 | 大小 | 最小值 | 最大值 | 包装器类型 |
boolean | - | - | - | Boolean |
char | 16-bit | Unicode 0 | Unicode 2^16-1 | Character |
byte | 8 bits | -128 | +127 | Byte |
short | 16 bits | -2^15 | +2^15-1 | Short |
int | 32 bits | -2^31 | +2^31-1 | Integer |
long | 64 bits | -2^63 | +2^63-1 | Long |
float | 32 bits | IEEE 754 | IEEE 754 | Float |
double | 64 bits | IEEE 754 | IEEE 754 | Double |
这类基本类型的, Java采用与C和C++相同的方法。也就是说,不用new来创建变量,而是创建一个并非是引用的“自动”变量。
这个变量直接存储“值”,并置于堆栈中,因此更加高效
String不是基本类型
高精度数字BigInteger和BigDecimal(可以进行整数和小数的高精度计算)
3. 永远不需要销毁对象
作用域的概念
创建的对象会自动回收,不需要手动销毁
4. 创建类
字段和方法(类的基本成员会有默认值,但是一般的局部变量x未初始化可能会是任意值,这在Java中会视为一个错误,在编译阶段就会报错)
5. 方法,参数和返回值
6. 构建一个Java程序
使用import导入包
static关键字(当声明一个事务时statci时,就意味着这个域或者这个方法不会与包含它的那个类的任何对象实例关联在一起。
所以,即使从未创建某个类的任何对象,也可以调用其static方法或访问其static域)
7. 代码的注释
可以使用javadoc输出注释的html文件
/**注释或者@字符