我在课堂上正确使用了这个关键字吗?

时间:2015-10-02 23:28:52

标签: java this

我是编程新手,这是我们在课堂上做的第一个面向对象的程序之一。我觉得我已经习惯了#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());   
    }  
}

5 个答案:

答案 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;
    }

}

不要过度使用此关键字,如果它们是另一个具有相同名称的变量,则需要在范围内使用它,并且您需要使用与此对象相关的字段,例如函数而不是静态函数。