撰写作者:Flieny 撰写日期:20190428
使用工具及技术:MyEclipse 10、JDK1.7
在学习JAVA初始化块的时候,初始化分为两种:初始化块、静态初始化块,那么接下来要讲的是它们有什么特点,有什么作用。
第一个要讲的是初始化块,初始化块是不使用static修饰的,初始化块的作用是初始化数据它和构造方法类似,初始化块有一个优势,一定会在构造器之前执行,这就导致了初始化块无论如何都是一定优先执行,当有多个初始化块时,那么它们的执行顺序将会是从上到下执行的。
如果一段初始化代码对所有构造器完全相同,且无需接受参数,那就可以将其提取到非静态初始化代码中,实际上经过编译后,非静态块已经添加到构造器中,且位于所有构造器代码的前面。
初始化块代码部分:
public class Initializationblock {
int intA; 定义A
int intB; 定义B
{intA=10;赋值A intB=15; 赋值B System.out.println("初始化块1")}
{System.out.println("初始化块2");}
{System.out.println("初始化块3");}
}
接下来是静态初始化块,静态初始化块又称为类初始化块,凡是static修饰的东西都可以称为类,静态初始化块一定会在类加载的时候去执行,所以它的执行速度在初始化块之前,静态初始化块在执行第一次的时候被调用了出来,它在第二次甚至第N次的时候再去执行静态初始化块就不会在调用出来了
因为静态初始化块是在类的初始化阶段完成的,因此在创建某个类的第二个对象时,该类的静态初始化块就不会再去执行了。
静态初始化代码部分
public class Initializationblock {
static{System.out.println("静态初始化块1");}//静态初始化块1
static{System.out.println("静态初始化块2");}//静态初始化块2
public Initializationblock(){System.out.println("无参构造器");}//无参构造器
public Initializationblock(int a){System.out.println("一个参数构造器");}//一个参数构造器
}
调用代码部分
public class Demo1 {
public static void main(String[] args) {
Initializationblock initializationblock=new Initializationblock();
System.out.println("---------------第二次执行-------------");
Initializationblock initializationblock2=new Initializationblock();
}
}
在执行后,可以发现第一次执行的时候静态初始化块出现了,并且在初始化块之前执行,在第二次执行的时候可以发现静态初始化块是在类的第一次加载时完成的,因此在创建某个类的第二次时,该类的静态初始化块在第二次时就不会在去执行了。
总结:在学习初始化块以及静态初始化块时,我们要知道它们是否是以static修饰的,是否会在第一次的执行,在第二次的时候不会执行,并且在单个类中初始化块、静态初始化块、构造器的执行顺序是静态初始化块先执行的(有多个静态初始化块时,那么它的执行顺序是从上往下执行的)接下来是初始化块执行(有多个初始化块时,那么它的执行顺序也是从上往下执行的),最后才到构造器执行。