代码块
代码是程序的表现,而代码块是代码的具体组成部分。在java中,我们将用{}括起来的块成为代码块,代码块分为以下四种。
1. 普通代码块
定义在方法中不加任何修饰符的代码块称为普通代码块。普通代码块使用较少,一般如果方法中的代码过长,为避免变量重名,可使用普通代码块进行解决,如下:
public static void main(String[] args) {
// 直接使用{}定义,普通方法块
{
int x = 10 ;
System.out.println("x = " +x);
}
int x = 100 ;
System.out.println("x = " +x);
}
2.构造块
定义在类中不加任何修饰(无修饰符)的代码块称为构造块。构造块优先构造方法执行,每创建一个对象,构造块就执行一次。主类中也有构造块,而且主类的构造块也是在主类构造方法之前执行的(主类也有构造方法,如果没有显示的写出,那么就是JVM提供的默认无参构造)。
构造块中可以执行简单的逻辑操作,使我们在执行构造方法之前能做些什么事情,如打印日志之类的。
3. 静态块
静态块优先于构造块执行,并且不管创建多少个对象都只在第一次创建该类对象的时候执行一次。
主类中也存在静态块,且主类中的静态块优先于main方法执行。
针对静态块以上的优点,如果有一些属性需要在对象创建开始就进行处理,可以考虑放在静态块中执行。
4. 同步代码块
同步代码块指的是被同步修饰符synchronized的代码块,用于将进入代码块的指定对象上锁,在上锁对象运行同步代码块期间,处于互斥状态。
class Demo {
// 构造方法
public Demo() {
System.out.println("1. 我是构造方法");
}
// 构造块
{
System.out.println("2. 我是构造块");
}
//静态快
static {
System.out.println("3. 我是静态块");
}
public void fun() {
// 普通代码块
{
int x = 10;
System.out.println("4. 我是普通代码块"+x);
}
int x = 100;
System.out.println("5. 我是普通方法"+x);
}
}
public class Test {
public static void main(String[] args) {
Demo demo = new Demo();
demo.fun();
}
}
运行结果: