Java在变量初始化是按照变量的定义顺序进行先后初始化的。先定义的变量不能使用后定义的变量进行初始化,因为此时后定义的变量还没有初始化,如果直接使用后定义的变量进行初始化,编译时会有错误,但是有一种方法可以使用后定义的变量初始化先定义的变量,那就是使用静态函数。
见代码:
public class StaticInit {
public static void main(String[] args) {
Test test = new Test();
}
}
class Test {
static Class1 class1 = new Class1(getName());
static Class2 class2 = new Class2();
static String getName()
{
return class2.getName();
}
}
class Class1 {
String name = "class1";
public Class1() {
System.out.println(name);
}
public Class1(String name1) {
System.out.println(name1 + name);
}
}
class Class2 {
String name = "class2";
public Class2() {
System.out.println(name);
}
public Class2(String name2) {
if(name2 == null)
System.out.println("NULL"+name);
else
System.out.println(name2+name);
}
public String getName() {
return name;
}
}
使用以上代码会报
java.lang.NullPointerException
错误!
静态变量初始化还有一种方法:使用静态语句块;将上面代码的Test类修改如下:
class Test {
//static Class1 class1 = new Class1(getName());
static Class1 class1;
static Class2 class2 = new Class2();
static
{
class1 = new Class1(getName());
}
static String getName()
{
return class2.getName();
}
}
程序将正常运行结果如下:
class2
class2class1
static语句块是在变量初始化完成后进行的。在执行语句块之前class1为null;