### 笔记: 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.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`关键字在构造方法中调用其他构造方法是一种常见的编程技巧,它可以使代码更加简洁,避免重复,并增加代码的可读性。但同时,程序员也需要注意上述的注意事项,以确保代码的正确性。
### `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中是一个强大的工具,它提供了明确引用当前对象的属性和方法的方法。然而,不正确的使用可能会导致错误或混淆,因此必须小心使用。