我是编程新手,这是我们在课堂上做的第一个面向对象的程序之一。我觉得我已经习惯了#34;这个。"比我需要的更多,但我的程序正常工作,我得到正确的输出。在我的getter中,我可以在不使用 this 的情况下返回变量吗?我想我的问题是 this.variablename 是指参数变量还是我班级顶部声明的数据字段?
import java.util.Date;
public class Account{
private int id = 0;
private double balance = 0;
private static double annualInterestRate = 0.00;
private Date dateCreated;
public Account(){}
public Account(int id, double balance){
this.id = id;
this.balance = balance;
}
public int getId(){
return this.id;
}
public void setId(int id){
this.id = id;
}
public double getBalance(){
return this.balance;
}
public void setBalance(double balance){
this.balance = balance;
}
public double getAnnualInterestRate(){
return this.annualInterestRate;
}
public void setAnnualInterestRate(double annualInterestRate){
this.annualInterestRate = annualInterestRate;
}
public Date getDateCreated(){
return this.dateCreated = new Date();
}
public double getMonthlyInterestRate(){
return (this.annualInterestRate / 12);
}
public double getMonthlyInterest(){
return ((this.annualInterestRate / 100) / 12) * this.balance;
}
public void withdraw(double amount){
this.balance -= amount;
}
public void deposit(double amount){
this.balance += amount;
}
}
这是我的主要方法和测试类:
public class AccountTest{
public static void main(String[] args){
Account myObject = new Account(112233, 20000.00);
myObject.setAnnualInterestRate(4.5);
myObject.withdraw(2500.00);
myObject.deposit(3000.00);
System.out.printf("The account balance is $%,.2f.", myObject.getBalance());
System.out.printf("\nThe monthly interest is $%,.2f.", myObject.getMonthlyInterest());
System.out.print("\nThe account was created at " + myObject.getDateCreated());
}
}
答案 0 :(得分:4)
我是否在班上正确使用过此关键字?
是。在严格不必要的情况下使用this
并不是错误的。有些人会认为它使意图更加清晰。无论哪种方式,这都是一种风格决定。
在我的getters中,我可以在不使用它的情况下返回变量吗?
是。
我想我的问题是this.variablename是指参数变量还是我班级顶部声明的数据字段?
this.name
指的是字段而不是参数。
name
可以引用参数或字段。如果存在(范围内)参数和具有相同名称的字段,则它将引用参数。因此如果你写了:
public void setId(int id){
id = id;
}
您只需将参数id
的值分配给自己。 "修复"对于我的损坏的setId
方法,要么使用this
,要么更改参数的名称;例如把它newId
。
答案 1 :(得分:0)
(this)可以在类的方法或构造函数中使用。 (this)用作对其方法或构造函数被调用的当前对象的引用。此关键字可用于从"实例方法"中引用当前对象的任何成员。或者#34;构造函数"。
答案 2 :(得分:0)
我使用的类比是你正在编写的代码将是一个脚本,就像播放一样,分发给所有演员(对象)。演员都扮演不同的角色(比如班级),因此他们能够在导演的要求下做各种事情。因此,在执行代码时,通常在某些实例的上下文中。您可以明确地告诉演员使用关键字this(例如this.id)来引用自己。
大多数情况下,您不需要使用关键字this,因为代码不会含糊不清(如果她只是说ID,我们都知道演员正在谈论什么)。但是你有一个例子,这是必要的;当你有一个与字段同名的局部变量/方法参数时,该变量被称为阴影字段。这可以!您只需要使用this.variable来引用字段,使用变量来引用该上下文中的本地。
在使用它来调用对象自己的构造函数时,你还没有触及它的另一个用途;一个明确的构造函数调用'。例如,您当前为空的Account()方法可以包含语句this(100, 0);
,以便使用两个参数调用其他构造函数方法。
来源:here。
答案 3 :(得分:0)
在你的getter中,你可以省略this
,它仍然有效,因为没有同名的局部变量。
您不应该使用this
来访问静态变量。访问annualInterestRate
的正确方法是首先指定类。例如:return ((Account.annualInterestRate / 100) / 12) * this.balance;
答案 4 :(得分:0)
您的代码将正常运行,但您过度使用此关键字, 在示例中正确使用此关键字
import java.util.Date;
public class Account {
private int id = 0;
private double balance = 0;
private static double annualInterestRate = 0.00;
private Date dateCreated;
public Account() {
}
public Account(int id, double balance) {
this.id = id;
this.balance = balance;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
public double getAnnualInterestRate() {
return annualInterestRate;
}
public void setAnnualInterestRate(double annualInterestRate) {
this.annualInterestRate = annualInterestRate;
}
public Date getDateCreated() {
return dateCreated = new Date();
}
public double getMonthlyInterestRate() {
return (annualInterestRate / 12);
}
public double getMonthlyInterest() {
return ((annualInterestRate / 100) / 12) * balance;
}
public void withdraw(double amount) {
balance -= amount;
}
public void deposit(double amount) {
balance += amount;
}
}
不要过度使用此关键字,如果它们是另一个具有相同名称的变量,则需要在范围内使用它,并且您需要使用与此对象相关的字段,例如函数而不是静态函数。