通常在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();
}
}
执行结果
我是静态代码块
我是构造代码块
我是无参构造函数