当前位置: 首页 > article >正文

Java中静态块和构造块

构造块(Instance Initializer Block)和静态块(Static Initializer Block)在Java中用于不同的初始化场景。下面我将通过一些示例来展示它们的使用。

### 构造块的使用示例

构造块用于初始化实例变量,它在每个构造函数执行之前执行。以下是一个构造块的使用示例:

```java

public class Person {

    String name;

    int age;

    // 构造块,用于初始化实例变量

    {

        name = "Unknown";

        age = 0;

        System.out.println("Instance initializer block executed.");

    }

    // 构造函数

    public Person(String name, int age) {

        this.name = name;

        this.age = age;

        System.out.println("Constructor executed.");

    }

    // 另一个构造函数

    public Person() {

        System.out.println("No-args constructor executed.");

    }

    public static void main(String[] args) {

        Person person1 = new Person("Alice", 30);

        Person person2 = new Person();

    }

}

```

在这个例子中,无论使用哪个构造函数创建 `Person` 对象,构造块都会首先执行,初始化 `name` 和 `age` 为默认值。

### 静态块的使用示例

静态块用于初始化类变量,它在类第一次被加载到JVM时执行。以下是一个静态块的使用示例:

```java

public class MyClass {

    static int staticCounter;

    // 静态块,用于初始化静态变量

    static {

        staticCounter = 100;

        System.out.println("Static initializer block executed.");

    }

    public MyClass() {

        System.out.println("Constructor executed.");

    }

    public static void main(String[] args) {

        MyClass myObject1 = new MyClass();

        MyClass myObject2 = new MyClass();

        System.out.println("Static counter value: " + MyClass.staticCounter);

    }

}

```

在这个例子中,静态块在类第一次被加载时执行,初始化静态变量 `staticCounter`。无论创建多少个 `MyClass` 的实例,静态块都只执行一次。

### 构造块和静态块结合使用

```java

public class Employee {

    static int employeeCount;

    int id;

    // 静态块

    static {

        employeeCount = 0;

        System.out.println("Static block executed, employee count initialized.");

    }

    // 构造块

    {

        id = ++employeeCount;

        System.out.println("Instance block executed, employee ID assigned: " + id);

    }

    // 构造函数

    public Employee() {

        System.out.println("Constructor executed.");

    }

    public static void main(String[] args) {

        Employee emp1 = new Employee();

        Employee emp2 = new Employee();

        System.out.println("Total employees: " + Employee.employeeCount);

    }

}

```

静态块里只能访问静态成员

在这个例子中,静态块用于初始化员工总数,而构造块用于为每个新创建的 `Employee` 对象分配一个唯一的ID。静态块在类第一次被加载时执行,构造块在每个对象创建时执行。

通过这些示例,你可以看到构造块和静态块在Java中初始化对象和类状态时的不同用途和时机。


http://www.kler.cn/news/335157.html

相关文章:

  • Pikachu-Sql-Inject - 通过sql进行远程服务器控制(试验)
  • MongoDB 快速入门+单机部署(附带脚本)
  • 华为OD机试 - Excel单元格数值统计(Python/JS/C/C++ 2024 E卷 200分)
  • git | 合并 commit 的两种方法
  • 没有很深入的理解一下数字图像传感器
  • VL53L4CD液位监测(2)----液位检测
  • 足球青训管理:Spring Boot技术实现
  • 【python实操】python小程序之函数的方法和赋值的区别
  • MySQL 临时表
  • 利用 Qt 和 MySQL 实现简单的数据库用户登录与创建功能
  • Linux 安装 yum
  • 聊聊JIT是如何影响JVM性能的!
  • YOLO11改进|卷积篇|引入SPDConv
  • unity一键注释日志和反注释日志
  • Transformer 模型和 BERT 模型:概述
  • Python机器学习模型的部署与维护:版本管理、监控与更新策略
  • SpringCloudAlibaba的nacos启动注册实现
  • C0007.Clion中添加ui文件及运行的完整步骤
  • MySQL深度分页
  • TypeScript编译选项