【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句柄与其第一个

对象失去了关联,转而指向第二个对象(第一个对象会被垃圾回收机制回收)。


 

 

posted @ 2012-03-20 14:12  Marstar  阅读(273)  评论(0)    收藏  举报