java初始化之变量初始化

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值