一、变量初始化规则
规则1(无继承情况下):
对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是
(静态变量、静态初始化块)>(变量、初始化块)>构造器
规则2(有继承情况下):
子类的静态变量和静态初始化块的初始化是在父类的变量、初始化块和构造器初始化之前就完成
总之:先静后动,先父后子,从上到下,先变量后构造
二、变量初始化应该注意的几点
1. 对于类的成员变量,不管程序有没有显式的进行初始化,Java虚拟机都会先自动给它初始化为默认值。
默认值如下:Boolean false
Char '\u0000'(null)
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d
2. 局部变量声明之后,Java虚拟机就不会自动给它初始化为默认值,因此局部变量的使用必须先经过显式的初始化。
3、static变量只在类引用这个变量或new这个类的时候进行有且一次初始化。
代码如下:
public class InitValue {
int i=9;
float floatValue;
char charValue;
static int staticValue=9;//只进行一次初始化,就是在调用类的这个变量或new一个类是进行初始化
InitValue(){
System.out.println("构造方法中的 i"+" "+i);
System.out.println("构造方法中的 floatValue"+" "+floatValue);
System.out.println("构造方法中的 charValue"+" "+charValue);
System.out.println("构造方法中的 staticValue"+" "+staticValue);
i=1;
}
public void Print(){
System.out.println("构造器初始化后 i"+" "+i);
System.out.println("构造器初始化后 floatValue"+" "+floatValue);
System.out.println("构造器初始化后 charValue"+" "+charValue);
System.out.println("构造器初始化后 staticValue"+" "+staticValue);
staticValue=19;
i=19;
int printValue=1;//局部变量必须初始化后才能使用
System.out.println("构造方法中的 printValue"+" "+printValue);
}
}
public class Main {
public static void main(String[] args) {
System.out.println("*********打印InitValue*********");
InitValue iv=new InitValue();
iv.Print();
System.out.println("*********打印InitValue2**********");
InitValue iv2=new InitValue();
iv2.Print();
}
}
输出的结果: