3.6 代码块

 

 思维导图:

3.6 代码块_第1张图片

 3.6.1 普通代码块

### 3.6 代码块

---

代码块是一段被大括号 `{}` 包围的代码。根据其定义和位置,代码块可以分为四类:普通代码块、构造块、静态代码块和同步代码块。这节我们将重点讨论普通代码块和构造块。

---

#### **3.6.1 普通代码块**- **定义**:普通代码块直接定义在方法或语句中。
  

  public class Test1 {
      public static void main(String[] args) {
          {
              int age = 18;
              System.out.println("这是普通代码块。age: " + age);
          }

          int age = 30;
          System.out.println("age: " + age);
      }
  }


  
- **特点**:
  - 每对 `{}` 定义了一个新的作用域。
  - 在同一个外部作用域中,内部的代码块可以定义与外部同名的变量,因为它们的作用域是不同的。
  - 代码块可以被用作限定变量的生命周期。

#### **3.6.2 构造块**

- **定义**:构造块定义在类中,没有前置关键字,也没有参数。每次创建类的实例时都会执行构造块。

  public class Test2 {
      {
          System.out.println("这是一个构造块。");
      }

      public Test2() {
          System.out.println("这是一个构造方法。");
      }

      public static void main(String[] args) {
          Test2 test = new Test2();
      }
  }

- **特点**:
  - 构造块会在每次创建对象时执行,但在构造方法之前。
  - 构造块常用于初始化实例变量或执行某些每次创建对象时都需要执行的操作。

---

#### **总结**:

1. **普通代码块**:主要用于限定变量的作用域和生命周期。
2. **构造块**:用于在创建对象时执行某些操作,这些操作通常是与所有构造方法共享的。

---

#### **注意点**:

- 记住代码块的作用域和生命周期。在同一个作用域内不能有两个相同的局部变量。
- 构造块在每次对象实例化时都会执行,因此它是一个对于所有构造方法的共通操作的好地方。

 3.6 代码块_第2张图片

 3.6.2 构造块

### 3.6.2 构造块

---

构造块是一个特殊的代码块,它直接在类中定义,而不在任何方法、构造方法或其他代码块内。它在每次创建类的实例时都会执行。

---

#### **案例演示**:

**文件**:Example12.java

class Student {
    // 成员属性
    String name;

    // 构造块
    {
        System.out.println("我是构造块");
    }

    // 构造方法
    public Student() {
        System.out.println("我是Student类的构造方法");
    }
}

public class Example12 {
    public static void main(String[] args) {
        Student stu1 = new Student();
        Student stu2 = new Student();
    }
}

在上述代码中,第3~5行代码是一个构造块。与构造方法和成员属性位于同一级别,但是在实例化对象时,它总是在构造方法之前执行。

**运行结果**:
```
我是构造块
我是Student类的构造方法
我是构造块
我是Student类的构造方法
```

---

#### **重点结论**:

1. 当创建一个新的`Student`实例时,构造块总是在构造方法之前执行,不论其在代码中的位置是先还是后。
2. 对于每个新实例化的对象,构造块都会执行一次,紧接着才是构造方法。

---

#### **应用场景**:

构造块主要用于执行与对象初始化相关的操作,尤其是当多个构造方法存在时,如果它们有一些公共的初始化代码,可以放在构造块中以避免代码重复。

---

#### **注意点**:

- 构造块在每次对象实例化时都会执行,因此不应该在其中放置大量的代码或可能导致性能问题的代码。
- 尽管构造块非常有用,但它们并不是必需的。如果类的所有构造方法都有相同的初始化代码,可能更合适的方式是创建一个私有的初始化方法并从每个构造方法中调用它。

3.6 代码块_第3张图片

你可能感兴趣的:(夏驰和徐策从零开始学JAVA,java,开发语言)