java知识汇总
先了解一下构造器,即构造对象的方法,可以定义对象的初始化状态。由于独对象构造非常重要,所以java提供了多种编写构造器的机制:
重载
默认与初始化
无参构造器
显示域初始化
参数名
调用另一个构造器
初始化块
##1、重载
即如果多个方法(构造器)有相同的名字、不同的参数,这种情况就叫做重载,编译器会通过参数类型和参数个数来选择具体哪个方法。(这个过程叫重构解析)
##2、默认域初始化
如果在构造器中没有显示的给域赋予初始值,那么被自动赋予默认值。数值为0、布尔值为false、对象引用为null
3、无参数的构造器
顾名思义,即没有参数的构造函数,其状态会设置为默认值
如果在编写一个类是没有编写构造器,系统会提供一个无参构造器;但是,如果类中提供了至少一个构造器,但是没有提供无参构造器,则在构造对象时如果没有提供参数就会不合法
4、显示域初始化
确保不管如何调用构造器每个实例域都可以被设置为一个有意义的初值,这是一个和好的设计习惯。
初始值不一定是常数值,
// 举例
//初始化
class Employee{
private static int nextId;
private int id = assignId();
...
private static int assignId(){
int r = nextId;
nextId++;
return r;
}
...
}
5、参数名
在编写很小的计数器时,常在参数命名上出现错误
class Employee(String a, double b){
name = n;
salary = s;
}
...
}
不容易理解参数a,s的含义
有一种技巧:参数变量用同样的名字将实例域屏蔽起来,例如下面的例子,如果将参数命名salary,salary将引用这个参数,而不是实例化,但是,可以采用this.salary的形式访问实例域。this指示因是参数,也就是构造的对象:
class Employee(String name, double salary){
this.name = name;
this.salary = salary;
}
...
}
6、调用另一个构造器
上面提到的this引用方法的隐式参数,然而this还有另外的含义。
如果构造器的第一个语句形如this.(…),这哥构造器将调用同一个类的另一个构造器。下面举个例子:
class Employee(double ){
this("Employee #" + nextId,s);
nextId++;
}
...
}
当调用new Employee(6000)时,Employee(double)构造器将调用Employee(String , double)构造器
采用这种方式使用this关键在非常有用,这样对公共的构造器代码之编写一次即可。
7、初始化块
前面已经讲过了两种初始化数据域的方法:
1、在构造器中设置值
2、在声明中赋值
实际上java还有第三种机制,称为初始化块,在一个类的声明中,可以包含多个代码块。只要构造类的对象,这行块就会被执行。
(此种方法不常见)
总结:由于初始化数据域有多种途径,所以列出构造过程的所有路径可能有些混乱,下面归纳一下调用构造器的具体处理步骤:
1)所有数据域被初始化为默认值(0、false、null)
2)按照在类声明中出现的次序,依次执行所有域初始化语句和初始化 块
3)如果构造器第一行调用了第二个构造器,则执行第二个构造器主体
4)执行构造器主体