默认初始化
在Java中,所有的变量在使用前都能得到恰当的初始化。包括类的数据成员,都会有一个初始值。
public class InitValue {
boolean t;
char c;
byte b;
int i;
short s;
long l;
double d;
float f;
InitValue r;
void printValue(){
System.out.println("Data type InitValue");
System.out.println("boolean " + t);
System.out.println("char " + c);
System.out.println("byte " + b);
System.out.println("int " + i);
System.out.println("short " + s);
System.out.println("long " + l);
System.out.println("double " + d);
System.out.println("float " + f);
System.out.println("InitValue " + r);
}
public static void main(String[] args){
InitValue iv = new InitValue();
iv.printValue();
}
}
运行结果如下:
因为char是0,所以是一个空白。上面也说明了一个问题,在类里定义一个对象引用时,如果不将其初始化,此引用就会获得一个特殊值null。
初始化顺序
在类内部的初始化中,变量定义的先后顺序决定初始化的顺序。不过当静态变量、静态初始化块、变量、初始化块、构造器在一起的时候,它们的初始化顺序是:(静态变量、静态初始化块)>(变量、初始化块)> 构造器。
对于静态数据,无论创建多少个对象,静态数据都只占用一份存储区域。Static关键字不能应用于局部变量。
class Cup{
Cup(int market){
System.out.println("Cup(" + market + ")");
}
void f(int market){
System.out.println("f(" + market + ")");
}
}
class Cups{
static{
Cup cup2 = new Cup(2);
}
static Cup cup1 = new Cup(1);
Cups(){
System.out.println("Cups()");
}
}
public class ExStatic {
public static void main(String[] args){
System.out.println("Inside main()");
new Cups();
Cups.cup1.f(99);
}
static Cups cups1 = new Cups();
static Cups cups2 = new Cups();
}
运行结果如下:
Cup(2)
Cup(1)
Cups()
Cups()
Inside main()
Cups()
f(99)
如果是父类和子类一起,则执行流程如下所示:
参考博客:
http://www.cnblogs.com/miniwiki/archive/2011/03/25/1995615.html