java类中static代码块的执行次数

本文解析了Java中static代码块的执行次数及其工作原理,通过示例代码演示了static代码块如何仅在类加载时执行一次。此外,还探讨了static代码块在项目初始化中的应用场景。

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

一、[b]java类中 static静态代码块的执行次数[/b]
1、在类加载的init阶段,类的类构造器中会收集所有的static块和字段并执行,static块只执行一次,由JVM保证其只执行一次。

2、[b]直接看示例[/b]

public class TestStatic{
public static String name = "";

static{
System.out.println("init ....");
name = "admin";
}

public static String getName(){
return name;
}

public static String getIdAndName(int id){
return id + "---" + name;
}

public static void main(String[] args) {
String name = TestStatic.getName();
String idAndName = TestStatic.getIdAndName(888);
System.out.println(name);
System.out.println(idAndName);
}

}

对执行结果分析:
在调用TestStatic类中任何一个方法时,jvm进行类加载,static语句块是在类加载器加载该类的最后阶段进行初始化的。并且只会被初始化一次。
若一次性调用多个方法,则只会执行一次static代码块。

说明:static语句块,不是在实例化的时候被执行的。



三、[b]static代码块的使用[/b]
1、项目对某些数据进行初始化,可以在两个地方处理。
第一、就是在项目启动时,加载某个类,对数据进行数据化(如:初始化基础数据或数据库连接池)。
第二、就是在某个工具类中使用static静态代码块,当第一次访问工具类时,就会先进行初始化(只会执行一次),保存到静态全局属性中,当其他类再次访问时,将直接使用初始化数据(如:连接redis数据库,并初始化连接池)。

2、缓存数据
<think>嗯,用户问的是Java中的实例代码块执行几次,我需要先回忆一下实例代码块的定义和执行机制。实例代码块,也就是非静态初始化块,它在每次创建的实例时都会执行每次new对象的时候,实例代码块都会运行,而且是在构造函数之前执行的。 不过要注意,如果有多个实例代码块,它们会按照在代码中的顺序依次执行。然后和字段的初始化器一起合并到构造函数中,顺序也是按照代码中的出现顺序。所以不管有多少个实例块,每个实例的创建都会触发它们的执行。 比如用户写了一个,里面有一个实例代码块,然后创建了三个对象,那么这个块就会执行三次。而如果是静态代码块的话,就只会在加载时执行一次,但用户问的是实例块,所以不需要考虑静态的情况。 可能用户会混淆实例块和静态块的区别,需要明确说明。另外,是否有特殊情况,比如通过反射或其他方式创建实例,但一般情况下都是通过new关键字,所以实例块每次都会执行。 总结来说,实例代码块执行次数等于创建实例的次数每次new的时候都会执行一次,不管是通过哪个构造函数。因此,用户的问题的答案就是实例代码块执行次数等于对象被实例化的次数每次创建实例都会执行一次。</think>在 Java 中,**实例代码块(非静态初始化块)** 的执行次数取决于对象的实例化次数每次通过 `new` 关键字创建的实例时,实例代码块都会执行一次。 --- ### 关键点: 1. **执行时机** 实例代码块会在 **每次创建对象时执行**,且在构造器调用之前执行。 2. **与静态代码块的区别** - 静态代码块 (`static{}`):加载时执行一次。 - 实例代码块 (`{}`):每次对象实例化时执行一次。 3. **合并行为** 如果一个中有多个实例代码块,它们会按代码顺序合并,最终与字段初始化器一起执行。 --- ### 示例代码: ```java public class Test { // 实例代码块 { System.out.println("实例代码块执行"); } public Test() { System.out.println("构造器执行"); } public static void main(String[] args) { new Test(); // 输出:实例代码块执行 → 构造器执行 new Test(); // 再次输出:实例代码块执行 → 构造器执行 } } ``` --- ### 结果分析: - 第一次 `new Test()`:实例代码块执行一次。 - 第二次 `new Test()`:实例代码块执行一次。 因此,**实例代码块执行次数 = 对象创建次数**。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值