JAVA初始化块

作用于构造器基本相同,但优先级更高(在执行构造器代码前执行)
语法:

修饰符
{
	可执行语句;
}

一个例子:

class a
{
	int a;
	{
		a = 5;
	}
}

修饰符只能是static(静态初始化块)或省略。由于初始化块没有名字,所以只能被隐式地执行。
实例初始化块执行时机:
假设一个类中有两个构造器,这两个构造器中有相同的代码,我们就可以把相同的代码提取出来,加到初始化块中,这样以后修改程序时修改一个地方即可,并且初始化块会在调用构造器前执行。因此逻辑上位于构造器前部的并且无需传入参数的代码可以放在初始化块中。
Java允许创建多个初始化块,但没什么意义 。
定义field时赋值和初始化块中的赋值优先级关系:
JDK编译器会把“初始块的代码”和“field声明时的赋值代码”都提取到构造器中执行,因此只需要看field声明赋值语句和代码块的先后关系,后面的会覆盖前面的赋值语句。可以用javap -c 类名查看先后关系,一目了然。

静态初始化块执行时机:
负责对类初始化,类被加载后初始化类时就会执行。JVM只会对一个类初始化一次,因此静态初始化块只会执行一次。
static field声明时赋值和静态初始化块中的赋值语句与实例初始化块的情形相同,在前面的赋值语句会被后面的覆盖掉。

初始化类的时机:
1.访问了类的静态方法或field。
2.初始化了改类的子类。
3.反射Class.forName(类名字符串)
4.该类作为主类使用,即有main方法且程序确实从此处开始执行。
5.创建了类的对象。
6.这种情况不会初始化类:

Apple a;

以上代码不会初始化Apple类。

猜你喜欢

转载自blog.csdn.net/tus00000/article/details/88210726