通常在Java中使用{ }包装起来的叫做代码块,用于实现数据的初始化或者实现特定的算法,java中的代码块是不能单独执行的,必须通过特定的方式才可以运行。大体上有四类:
【1】普通代码块
【2】静态代码块
【3】同步代码块
【4】构造代码块
【5】各个代码块执行顺序比较
普通代码块
普通代码块也就是跟在方法( )之后的代码块,这也是最为常见的,就不过多解释了。
静态代码块
通过static{ }的方式来初始化代码,他的主要目的是对静态变量进行初始化,这种也见过
同步代码块
想到同步肯定想到synchronized,没错就是使用synchronized{ }来初始化的代码块,是一种线程的同步机制。
构造代码块
构造代码块是依托于构造函数来执行的,没执行构造函数之前就先执行构造代码块,不管是有参构造函数还是无参构造函数。那么构造代码块有什么作用呢?第一就是初始化的作用,这个应该都可以想到,第二就是初始化环境,因为代码块是在构造函数之前就执行了,所以可以用来初始化构造函数需要的复杂环境。
package TwoWeek; /*构造代码块*/ public class StruBlock { { System.out.println("我是构造代码块"); } public StruBlock(){ System.out.println("我是无参构造函数"); } public StruBlock(int a){ System.out.println("我是有参构造函数"); } public static void main(String args[]){ new StruBlock(); System.out.println(); new StruBlock(4); } }输出结果为
我是构造代码块 我是无参构造函数 我是构造代码块 我是有参构造函数
是各个代码块执行顺序的比较,可以看出静态代码块的是最先执行的,static代码块是随着类的加载而执行的,只执行一次,用于初始化类。
构造代码块每创建一个对象就会执行一次,且执行顺序优先于构造函数
package TwoWeek; /*构造代码块*/ public class StruBlock { //普通代码块 public void fun(){ System.out.println("我是普通代码块"); } //静态代码块 static{ System.out.println("我是静态代码块"); } { System.out.println("我是构造代码块"); } public StruBlock(){ System.out.println("我是无参构造函数"); } public static void main(String args[]){ new StruBlock(); } }执行结果
我是静态代码块 我是构造代码块 我是无参构造函数