通过重载类的构造器方法,可以采用多种形式设置类的实例域的初始状态。确保不管怎样调用构造器,每个实例域都可以被设置为一个有意义的初值,这是一种很好的编程习惯。
class Employee {
private String name = "";
}
当然了,初始值不一定都是常量值。也可以用方法对域进行初始化。例如:
class Employee {
private static int nextId;
private int id = this.changeid();
private int id2 = changeid2();
public int changeid() {
int r = id;
id++;
return r;
}
public static int changeid2() {
int r = nextId;
nextId++;
return r;
}
}
public static void main(String[] args) {
Student s1 = new Student();
s1.setAge(100);
s1.setName("李四");
for(int i = 0 ; i < 10 ; i++) {
Student s = new Student();
System.out.println("id:"+ s.getid());
System.out.println("id:"+ s.getid());
System.out.println("id2:"+ s.getid2());
System.out.println("id2:"+ s.getid2());
}
Student s2 = new Student();
s2.setAge(11);
s2.setName("王五");
swapStudent(s1, s2);
System.out.println("s1 : " + s1);
System.out.println("s2 : " + s2);
}
输出的结果为:
id:0
id:0
id2:1
id2:1
id:0
id:0
id2:2
id2:2
id:0
id:0
id2:3
id2:3
id:0
id:0
id2:4
id2:4
id:0
id:0
id2:5
id2:5
id:0
id:0
id2:6
id2:6
id:0
id:0
id2:7
id2:7
id:0
id:0
id2:8
id2:8
id:0
id:0
id2:9
id2:9
id:0
id:0
id2:10
id2:10
我们来分析一下他为什么用静态的域初始化就会发生不断变大的操作,大家都知道,静态的变量跟其他的变量存放的位置是不一样的,他们都存放在堆中,而静态的变量存放在属于自己的一个小位置中,任何新的类实例化的时候,静态的变量只有一块存储区域,不会改变,也不会新开辟一块区域。而其他的变量就会随着对象实例化的时候,新开辟自己的空间来存放自己的变量,也就是封装。我们用图来解释一下:
随着对象的增加,id会不断地开辟新的内存,而id2则会一直的增大,这样就会输出了上述的东西。