Java 我在课堂上是否正确使用了this关键字?

Java 我在课堂上是否正确使用了this关键字?,java,this,Java,This,我是编程新手,这是我们在课堂上做的第一个面向对象的程序之一。我觉得我已经使用了“这个”。比我需要的更多,但我的程序工作正常,我得到了正确的输出。在我的getters中,我可以不使用这个返回变量吗?我想我的问题是this.variablename是指参数变量还是类顶部声明的数据字段 import java.util.Date; public class Account{ private int id = 0; private double balance = 0; pr

我是编程新手,这是我们在课堂上做的第一个面向对象的程序之一。我觉得我已经使用了“这个”。比我需要的更多,但我的程序工作正常,我得到了正确的输出。在我的getters中,我可以不使用这个返回变量吗?我想我的问题是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());   
    }  
}
(this)可以在类的方法或构造函数内部使用。(this)用作对其方法或构造函数正在被调用的当前对象的引用。此关键字可用于从“实例方法”或“构造函数”中引用当前对象的任何成员。

(此)可在类的方法或构造函数中使用。(this)用作对其方法或构造函数正在被调用的当前对象的引用。此关键字可用于引用“实例方法”或“构造函数”中当前对象的任何成员

我在课堂上是否正确使用了this关键字

对。在完全没有必要的情况下,使用
并非不正确。有些人会争辩说,这使意图更加明确。不管怎样,这都是一个风格决定

在我的getters中,我可以不使用这个返回变量吗

我想我的问题是this.variablename是指参数变量还是类顶部声明的数据字段

this.name
指的是字段而不是参数

name
可以引用参数或字段。如果有一个(范围内)参数和一个同名字段,它将引用参数。因此,如果你写:

public void setId(int id){
    id = id;
}
您只需将参数
id
的值分配给自身即可。“修复”我的断开的
setId
方法是使用
this
或更改参数的名称;e、 g.使其成为
newId

我在课堂上是否正确使用了this关键字

对。在完全没有必要的情况下,使用
并非不正确。有些人会争辩说,这使意图更加明确。不管怎样,这都是一个风格决定

在我的getters中,我可以不使用这个返回变量吗

我想我的问题是this.variablename是指参数变量还是类顶部声明的数据字段

this.name
指的是字段而不是参数

name
可以引用参数或字段。如果有一个(范围内)参数和一个同名字段,它将引用参数。因此,如果你写:

public void setId(int id){
    id = id;
}

您只需将参数
id
的值分配给自身即可。“修复”我的断开的
setId
方法是使用
this
或更改参数的名称;e、 g.让它成为
newId

我使用的类比是,你正在编写的代码将是一个脚本,就像剧本一样,分发给所有演员(对象)。演员们都扮演不同的角色(比如班级),因此他们能够按照导演的要求做各种事情。所以当代码被执行时,通常是在某个实例的上下文中。您可以显式地告诉参与者使用关键字this(例如this.id)来引用自己

大多数情况下,您不需要使用关键字this,因为代码不会模棱两可(如果演员只说ID,我们都知道她在说什么)。但你有一个例子证明这是必要的;当您有与字段同名的局部变量/方法参数时,该变量称为字段的阴影。这很好!您只需要使用this.variable来引用字段,并使用variable来引用该上下文中的本地变量

在使用this调用对象自己的构造函数的过程中,您没有提到的另一个用法;“显式构造函数调用”。例如,您当前的空Account()方法可以包含语句
this(100,0),以便使用两个参数调用另一个构造函数方法


来源:。

我使用的类比是,你正在编写的代码将是一个脚本,就像剧本一样,分发给所有演员(对象)。演员们都扮演不同的角色(比如班级),因此他们能够按照导演的要求做各种事情。所以当代码被执行时,通常是在某个实例的上下文中。您可以显式地告诉参与者使用关键字this(例如this.id)来引用自己

大多数情况下,您不需要使用关键字this,因为代码不会模棱两可(如果演员只说ID,我们都知道她在说什么)。但你有一个例子证明这是必要的;当您有与字段同名的局部变量/方法参数时,该变量称为字段的阴影。这很好!您只需要使用this.variable来引用字段,并使用variable来引用该上下文中的本地变量

在使用this调用对象自己的构造函数的过程中,您没有提到的另一个用法;“显式构造函数调用”。例如,您当前的空Account()方法可以包含语句
this(100,0),以便使用两个参数调用另一个构造函数方法


来源:。

在getter中,您可以使用
忽略此
,它仍然有效,因为没有同名的局部变量

您不应该使用
访问静态变量。访问
annualInterestate
的正确方法是首先指定类。例如:
return((Account.annualinterestate/100)/12)*this.balance