【21】java初始化(普通变量)
与C++不同,java允许在类的定义过程中,为其成员变量进行初始化。如果程序员未给类的成员变量指定初值,编译器会为其指定默认的初值。
class Counter {
int i;
Counter() { i = 7; }
// . . .
上述简单代码中,成员变量i的值首先为0,接着当创建该类的对象时,i的值又被设置为7。
与C++不同,java中不允许使用未经初始化的变量。
在java的一个类中,初始化的顺序是由变量在类中的定义顺序决定的。即使变量的定义大量分散于方法定义的中间,那些变量仍然会在调用任何方法之前得到初始化。例如:
public class Tag {
public Tag(int number){
System.err.println("Tag number is:" + number);
}
}
public class Card {
Tag ta = new Tag(1);//one
public Card(){
System.err.println("Card constructor");
tb = new Tag(4);//four
}
Tag tb = new Tag(3);//two
Tag tc = new Tag(2);//three
}
输出结果是:
Tag number is:1
Tag number is:3
Tag number is:2
Card constructor
Tag number is:4
有结果看出,变量是在调用任何方法之前得到了初始化,且初始化的顺序与其在代码中声明的顺序相同。
值得注意的一点是变量tb,它被初始化了两次,第一次是new Tag(3),第二次是在Card的构造函数中,且第二次初始化之后,tb句柄与其第一个
对象失去了关联,转而指向第二个对象(第一个对象会被垃圾回收机制回收)。

浙公网安备 33010602011771号