自学内容网 自学内容网

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中初始化对象和类状态时的不同用途和时机。


原文地址:https://blog.csdn.net/2301_80412275/article/details/142056500

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!