Java中静态代码块、构造代码块、普通代码块

本文深入解析Java中的四种代码块:局部代码块、构造代码块、静态代码块和同步代码块,详细介绍了每种代码块的特点、作用及执行顺序,帮助读者全面理解Java代码块的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码块的概述和分类

什么是代码块

在Java中用{}括起来的称为代码块。

代码块分类

1.局部代码块

在方法中出现;限定变量生命周期,及早释放,提高内存利用率。
代码如下:

public class Demo {
    public void jubu(){
        System.out.println("这是一个局部代码块");
    }

    public static void main(String[] args) {
        Demo demo = new Demo();
        demo.jubu();
    }
}

执行结果:
在这里插入图片描述

2.构造代码块

1)在Java类中方法外用{}声明的代码块。
2)构造代码块在创建对象时被调用,每次创建对象都会调用一次,但是优先于构造函数执行。如果不实例化对象,构造代码块是不会执行的。如果存在多个构造代码块,则执行顺序按照书写顺序依次执行。
3)和构造函数的作用类似,都能对对象进行初始化,并且只要创建一个对象,构造代码块都会执行一次。但是反过来,构造函数则不一定每个对象建立时都执行(多个构造函数情况下,建立对象时传入的参数不同则初始化使用对应的构造函数)。
4)利用每次创建对象的时候都会提前调用一次构造代码块特性,我们可以做诸如统计创建对象的次数等功能。
代码如下:

public class Demo {
    {
        System.out.println("这是一个构造代码块");
    }
    public  Demo(){
        System.out.println("这是一个无参构造函数");
    }


    public static void main(String[] args) {
        Demo demo = new Demo();

    }
}

执行结果:
在这里插入图片描述

3.静态代码块

1)在java类中(方法中不能存在静态代码块)使用static关键字和{}声明的代码块。
2)静态代码块在类被加载的时候就运行了,而且只运行一次,并且优先于各种代码块以及构造函数。如果一个类中有多个静态代码块,会按照书写顺序依次执行。
3)一般情况下,如果有些代码需要在项目启动的时候就执行,这时候就需要静态代码块。比如一个项目启动需要加载的很多配置文件等资源,我们就可以都放入静态代码块中。
普通方法,通过加载类,然后new出实例化对象,通过对象才能运行这个方法。而静态代码块只需要加载类之后就能运行了。
对于静态方法,在类加载的时候,静态方法也已经加载了,但是我们必须要通过类名或者对象名才能访问,也就是说相比于静态代码块,静态代码块是主动运行的,而静态方法是被动运行的。
4)静态代码块不能访问普通变量
普通变量只能通过对象来调用,是不能放在静态代码块中的。
代码如下:

public class Demo {

static {
    System.out.println("这是静态代码块");
}

    public static void main(String[] args) {
        Demo demo = new Demo();

    }
}

执行结果:
这是静态代码块

4.同步代码块

使用synchronized(){}包裹起来的代码块,在多线程环境下,对共享数据的读写操作是需要互斥进行的,否则会导致数据的不一致性。同步代码块需要写在方法中。

代码块执行顺序

静态代码块>构造代码块>构造函数>普通代码块 
代码如下:

public class Demo {
    public void jubu(){
        System.out.println("这是一个局部代码块");
    }
    {
        System.out.println("这是一个构造代码块");
    }
    public  Demo(){
        System.out.println("这是一个无参构造函数");
    }
static {
    System.out.println("这是静态代码块");
}

    public static void main(String[] args) {
      new Demo().jubu();
        System.out.println("---------------");
      new Demo().jubu();
    }
}

执行结果:
在这里插入图片描述
创建了两个匿名对象,静态代码块只执行一次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值