5 初始化与清理
5.2.1 区分重载方法
每一个重载方法都必须有独一的参数类型列表(包括参数的类型和参数的顺序)
不能以返回值来区分重载方法
5.6 成员初始化
1 局部变量未初始化不能通过编译
2 类的数据成员会保证得到一个初始值
5.7 构造器初始化
无法阻止自动初始化的进行,自动初始化将在构造器调用之前执行
5.7.1 初始化顺序
变量初始化的顺序取决于类内部变量定义的先后顺序
5.7.2 静态数据的初始化
静态初始化仅在必要时刻进行,并且只会进行一次。
初始化的顺序是静态对象初始化在前,然后是非静态对象。
对象创建过程(不考虑继承的情况)
1 java解释器查找类路径,定位class文件。
2 载入class文件,创建class对象,静态初始化的所有动作此时执行(静态初始化的所有动作只在class对象首次加载时执行一次)
3 如果是new 方法创建对象,此时应该在堆上为此对象分配空间
4 根据字段定义顺序执行字段的初始化
5 执行构造器
5.7.3 显示静态初始化 static{}
只是一段代码块,同样只会执行一次(在创建这个类的第一个对象的时候,或者第一次访问这个类的静态数据成员的时候)
5.7.3 非静态实例初始化 {}
用来初始化非静态变量,可以用来保证无论使用哪个构造器,{}中的操作都会发生,因为{}中的实例化子句在构造器之前执行
5.8.1 可变参数列表
java SE5之后,可以用下面的方式声明可变参数
static void myMethod(Object... args)//args是一个Object数组
static void myMethod2(String... args)//args是一个String数组
调用myMethod时,传入的参数可以是0个或者其他任意个object,所以为了防止与无参的static void myMethod()混淆,方法中应该至少包含一个非可变参数
5.9 枚举类型
javaSE5之后可以使用enum关键字来定义枚举
pulic enum MyEnum{
SMALL,MEDIUM,BIG
}
为了使用enum,需要创建一个该类型的引用
MyEnum small = MyEnum.SMALL;
//编译器会为small添加很多有用的方法,如toString(),ordinal(),values()
//values()按照enum常量的声明顺序返回常量构成数组
enum的实用特性:
enum可以作为switch的判断条件
如果已经声明了small,则有以下用法
MyEnum myEnum = MyEnum.SMALL;
switch(myEnum){
case SMALL: sys("it's small");
break;
case BIG: sys("it's big");
break;
}
很显然将会输出it’s small