本文主要是介绍《深入理解 Java 中的 this 关键字》,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
一、this关键字的基本理解
二、this调用属性和方法
(一)一般情况
(二)特殊情况
三、this调用构造器
四、案例分析
(一)Account类
(二)Customer类
(三)Bank类
(四)BankTest测试类
一、this
关键字的基本理解
- 当前对象(在方法中):在非静态方法中,
this
代表当前正在调用该方法的对象。通过this
,我们可以访问当前对象的属性和其他方法。 - 当前正在创建的对象(在构造器中):在构造器中,
this
代表正在被创建的对象。可以使用this
在构造器中调用其他构造器,进行构造器的链式调用。
二、this
调用属性和方法
(一)一般情况
在非静态方法内,当方法的形参与对象的属性不同名时,我们通过对象调用方法,可以直接在方法内调用当前对象的属性或其他方法,此时即便不使用this
,也能明确区分是当前对象的属性和方法。一般情况下我们都选择省略this
结构,代码更加简洁。
(二)特殊情况
当方法的形参与对象的属性同名时,为了区分这两个变量,我们可以使用this
修饰的变量表示属性,没有用this
修饰的表示形参(局部变量)。
例如在以下代码中:
public class Customer {private String firstName;private String lastName;public Customer(String f, String l) {this.firstName = f; // 名,使用 this 区分属性和形参this.lastName = l; // 姓,使用 this 区分属性和形参}
}
三、this
调用构造器
我们可以在类的构造器中,使用this(形参列表)
的方式调用当前类中指定的其他构造器。要求this(形参列表)
必须声明在当前构造器的首行,并且一个类中声明了n
个构造器,则最多有n - 1
个构造器可以声明this(形参列表)
的结构。
public class Account {private double balance;public Account() {}public Account(double init_balance) {this.balance = init_balance;}
}
四、案例分析
以下是一个包含Account
类、Customer
类、Bank
类以及BankTest
测试类的案例,通过银行管理客户和账户的场景来展示this
的用法。
(一)Account
类
该类表示账户,包含余额属性balance
,以及存款deposit
和取款withdraw
方法。
public class Account {private double balance;public Account() {}public Account(double init_balance) {this.balance = init_balance;}public double getBalance() {return balance;}public void deposit(double amt) {if (amt > 0) {balance += amt;System.out.println("成功存入" + amt);}}public void withdraw(double amt) {if (balance >= amt && amt > 0) {balance -= amt;System.out.println("成功取出" + amt);} else {System.out.println("取款金额有误余额不足");}}
}
(二)Customer
类
表示客户,包含名firstName
、姓lastName
和账户account
属性,以及相应的 getter 和 setter 方法。
public class Customer {private String firstName;private String lastName;private Account account;public Customer(String f, String l) {this.firstName = f;this.lastName = l;}public String getFirstName() {return firstName;}public String getLastName() {return lastName;}public Account getAccount() {return account;}public void setAccount(Account acct) {this.account = acct;}
}
(三)Bank
类
表示银行,包含用于保存多个客户的数组customers
和记录存储的客户个数的变量numberOfCustomer
。提供了添加客户addCustomer
、获取客户个数getNumOfCustomers
和获取指定索引位置客户getCustomer
的方法。
public class Bank {private Customer[] customers;private int numberOfCustomer;public Bank() {customers = new Customer[10];}public void addCustomer(String f, String l) {Customer cust = new Customer(f, l);customers[numberOfCustomer] = cust;numberOfCustomer++;}public int getNumOfCustomers() {return numberOfCustomer;}public Customer getCustomer(int index) {if (index < 0 || index >= numberOfCustomer) {return null;} else {return customers[index];}}
}
(四)BankTest
测试类
在main
方法中创建了一个银行对象,添加了两个客户,为第一个客户设置了账户,并进行了取款和存款操作,最后输出第一个客户的账户余额。
public class BankTest {public static void main(String[] args) {Bank bank = new Bank();bank.addCustomer("哥", "刘");bank.addCustomer("硕", "张");bank.getCustomer(0).setAccount(new Account(1000));bank.getCustomer(0).getAccount().withdraw(50);bank.getCustomer(0).getAccount().deposit(100);System.out.println("账户余额为" + bank.getCustomer(0).getAccount().getBalance());}
}
在这个案例中,Customer
类的构造器中使用了this
来区分形参和属性。同时,在BankTest
测试类中,通过对象调用方法时,虽然没有显式使用this
,但实际上也是在操作当前对象的属性和方法。
通过这个案例,我们可以更深入地理解this
关键字在 Java 编程中的重要性和实际应用。它能够帮助我们更好地管理对象的属性和方法,提高代码的可读性和可维护性。
这篇关于《深入理解 Java 中的 this 关键字》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!