构造代码块,静态代码块,局部代码块与new对象时,执行的次序

本文详细介绍了Java中的代码块,包括局部代码块、构造代码块和静态代码块的定义、作用及执行次序。局部代码块用于限定变量生命周期并节约内存,构造代码块在每次实例化时执行,而静态代码块则在类加载时一次性执行,适用于初始化类级资源。

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

一. 代码块

概念:
使用{} 括起来的代码,称为代码块

分类:
根据它位置和声明的不同,我们可以将代码块分为局部代码块,构造代码块,静态代码块,同步代码块(多线程涉及)

a. 局部代码块

限定了变量的生命周期,变量在局部代码块中定义的,那么出来局部代码块之后,就访问不到了。在局部代码块中定义的变量,
在出了代码块之后,内存就会释放掉。

作用: 主要就是节约内存.

局部代码块中定义的变量,虽然说作用域是局部的,但是如果存在外部嵌套的代码块,且在局部代码块定义之前就定义了某个变量,
那么在我们局部的代码块中就不可以定义相同名称的变量。
但是如果在局部代码块执行之后,去定义一个和局部代码块中相同名称的变量,是可以的。因为局部代码块中的变量已经失去了作用域范围。

b.构造代码块

概念:
类中方法外出现,每次调用构造方法的时候,都会优先先调用构造代码块。

特点:
没创建一个对象,都会调用一次我们的构造代码块.

作用:
如果存在很多重载的构造方法,而且每个里面需要执行 相同的逻辑,那么就可以考虑将这些代码提取到构造代码块中来执行。
让我们代码结构更简练。增强了维护性.
使用场景其实不太多见。

c.静态代码块

概念:
类中方法外出现,但是用static 来进行修饰。

特点:
随着类加载的时候执行。

用处:
适用于整个软件的生命周期中,只需要执行一次的业务逻辑代码。
比如我们之后数据库的操作.

特别经典的一道面试题

//注意:静态代码也是按顺序随类的加载而执行的
package snippet;

public class Test {
    public static int w=0;
    public static int f=print("f");
    public static int nom=99;
    public static int s=print("s");
    public static Test d1 =new Test("d1");
    public static Test d2=new Test("d2");
    {
        System.out.println("构造快");
    }
    static{
        System.out.println("静态块");
    }

    public  Test(String str){
        System.out.println((++w)+":"+str+" f="+f+" nom="+nom);
         ++f;++nom;
    }
    public static int print(String str){
        System.out.println((++w)+":"+str+" f="+f+" nom="+nom);
        ++nom;
        return ++f;
    }
    public static void main(String[] args){
        Test d=new Test("init");
    }


}

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值