5.1用构造器确保初始化
跟C++中的构造器类似
初始化和创建绑定在一起,密不可分。
构造器没有返回值;是默认的static函数
5.2方法重载
和C++中类似
一个方法的签名本质是由原来的方法名,参数列表和返回值构成的,所以虽然是重载了的方法,其本质还是各不相同的一组方法。
基本类型的重载
- 实参类型小于形参类型:自动提升
- 实参类型大于形参类型:需要手动进行强制类型转换
5.3默认构造器
如果自己定义了构造器,就不会自动产生默认构造器了
5.4this指针
其实类的成员函数都有一个参数this,用来指向当前对象
static的含义
static用来表示类变量和方法,区别于成员变量和方法。
static修饰过的变量只初始化一次
static修饰过的方法没有this指针。
5.5终结处理和垃圾回收
这一部分看我之前的一篇文章[编译原理]垃圾收集即可了解。将来会在讲到JVM的时候更详细地讲述
概念
- 自适应技术:自适应的、分代的、停止-复制、标记清扫式的垃圾回收器
- JIT:及时编译
5.6成员初始化
- 局部变量不会自动初始化
- 局部变量自动初始化(引用类型初始化为null)
5.7构造器初始化
- 自动初始化在构造器初始化之前进行,如下代码i自动初始化位0,然后由构造器初始化为7.
public class Counter {
int i;
Counter(){ i = 7; }
}
- 类中成员变量的初始化顺序同其在类中排列的顺序相同。
- 静态数据的初始化:基本数据类型位其标准值,引用则为null
对象创建过程:
- 类初始化(不是对象初始化),当类被首次访问时
- 载入类的class文件,静态初始化进行
- 为对象分配内存
- 基本数据类型置为基本值,引用置为null
- 执行所有出现于字段定义处的初始化动作
- 执行构造器
5.8数组初始化
就谈一下可变参数列表
形如:public void function(Object ...args)
实现原理就是一个Object(java中的泛型也是用Object擦除实现的)类型的数组,用的时候需要强制类型转换
5.9枚举
java的枚举好像要比C语言中的枚举复杂不少
jdk5之后才出现枚举,之前需要定义整数常量集来实现(跟C语言的比较像啊)。enum本质是类,自动实现toString方法和ordinal方法,后者给出美剧常量的声明顺序。