3.5 This关键字-LMLPHP

 思维导图:

3.5 This关键字-LMLPHP

3.5 This关键字-LMLPHP

 3.5.1 使用this关键字调用本类的属性

### 笔记: 3.5 `this`关键字

---

#### **概述**:
在Java中,`this`关键字用于引用当前对象的实例。当类的成员变量与构造方法或方法中的参数名称发生冲突时,我们可以使用`this`来区分。`this`关键字在Java中有三种主要的用途:

1. 调用当前类中的属性。
2. 调用成员方法。
3. 调用构造方法。

---

#### **1. 使用`this`调用本类中的属性**:
当局部变量(如方法或构造方法的参数)的名称与类的成员变量名称相同时,可以使用`this`来指代当前对象的成员变量。

**问题示例**:

class Student {
    private String name;
    private int age;

    public Student(String name, int age) {
        age = age; 
    }

    public String read() {
        return "我是:" + name + ", 年龄:" + age;
    }
}

上述代码中,构造方法的参数名称与对象的成员变量名称相同,导致成员变量`age`没有被正确初始化。

**运行结果**: "我是:null, 年龄:0"

**解决方案**:
使用`this`关键字来区分成员变量与构造方法的参数。

public Student(String name, int age) {
    this.age = age;
}

这样,使用`this.age`来表示类的成员变量`age`,而单独的`age`则代表构造方法的参数。

---

#### **2. 使用`this`调用成员方法**:
这种情况较为少见,但你可以使用`this`关键字来调用当前对象的其他方法。例如, `this.someMethod();`

#### **3. 使用`this`调用构造方法**:
在某个构造方法内部,你可以使用`this()`来调用该类的其他构造方法。这常用于构造方法的重载,当多个构造方法有相似的代码时,可以通过`this()`来复用代码。

---

#### **结论**:
`this`关键字是Java面向对象编程中的一个重要概念,它帮助我们区分成员变量和局部变量,避免命名冲突,同时使代码更加简洁和易于维护。

3.5 This关键字-LMLPHP 3.5.3 使用this关键字调用成员方法 

### 笔记: 3.5.3 使用`this`关键字调用构造方法

---

#### **概述**:
在Java中,我们不能直接像调用其他成员方法一样调用构造方法。但是,在一个构造方法中可以使用`this(参数1, 参数2, ...)`的形式来调用类中的其他构造方法。这种技巧主要用于代码重用和逻辑清晰。

---

#### **示例**:

在下面的`Student`类中,我们有两个构造方法:一个无参构造方法和一个有参构造方法。在有参构造方法中,我们使用`this()`调用了无参构造方法。

class Student {
    private String name;
    private int age;

    public Student() {
        System.out.println("调用了无参构造方法");
    }

    public Student(String name, int age) {
        this(); // 调用无参构造方法
        this.name = name;
        this.age = age;
    }

    public String read() {
        return "我是:" + name + ", 年龄:" + age;
    }
}

---

#### **注意事项**:

1. **位置重要性**: 在构造方法中,使用`this`调用其他构造方法的语句必须位于第一行。这样可以确保构造过程的逻辑顺序不会被打破。
  
2. **唯一性**: 你只能在构造方法中使用`this`调用其他构造方法一次。不可以多次调用。

3. **防止循环调用**: 不能在两个构造方法中使用`this`进行互相调用,这会导致无限循环,进而导致`StackOverflowError`错误。

错误示例:

public Student() {
    this("张三"); // 调用有参构造方法
    System.out.println("有参构造方法被调用了。");
}

public Student(String name) {
    this(); // 调用无参构造方法,形成循环调用
    System.out.println("无参构造方法被调用了。");
}

---

#### **结论**:
使用`this`关键字在构造方法中调用其他构造方法是一种常见的编程技巧,它可以使代码更加简洁,避免重复,并增加代码的可读性。但同时,程序员也需要注意上述的注意事项,以确保代码的正确性。

3.5 This关键字-LMLPHP 

 

 

3.5 This关键字-LMLPHP 

 

 

3.5 This关键字-LMLPHP 总结:

### `this`关键字总结

---

#### **重点**:

1. **定义**: 在Java中,`this`是一个引用变量,它引用了当前对象。
   
2. **使用场景**:
    - 调用本类的属性。
    - 调用本类的成员方法。
    - 调用本类的构造方法。

3. **构造方法中的使用**: 在一个构造方法中,可以使用`this(参数1, 参数2, ...)`的形式来调用类中的其他构造方法。

---

#### **难点**:

1. **区分属性与参数**: 当类的属性与构造方法或方法的参数同名时,使用`this`关键字可以帮助我们区分它们。例如,`this.name = name;`

2. **构造方法中的调用**: 理解在一个构造方法内如何和为什么要使用`this`来调用另一个构造方法。

3. **方法链**: 在某些设计模式中,例如Builder模式,`this`经常用于返回当前对象,从而使方法调用可以被链接在一起。

---

#### **易错点**:

1. **位置错误**: 在构造方法中,使用`this`来调用其他构造方法时,这个调用必须是第一个语句。

2. **循环调用**: 不能让两个构造方法通过`this`互相调用,这会导致无限循环并最终抛出`StackOverflowError`错误。

3. **过度使用**: 在不需要明确指向当前对象的属性或方法时,避免使用`this`,因为它可能会使代码冗长和混乱。

4. **与局部变量混淆**: 当成员变量与局部变量(例如方法或构造函数的参数)同名时,如果忘记使用`this`,则默认引用的是局部变量,这可能导致意外的错误。

---

#### **结论**:

`this`关键字在Java中是一个强大的工具,它提供了明确引用当前对象的属性和方法的方法。然而,不正确的使用可能会导致错误或混淆,因此必须小心使用。

 3.5 This关键字-LMLPHP

10-14 11:29