在使用 setter 和 getter 方面需要帮助

Need help using setters and getters

我对 setter 和 getter 很陌生。我正在开发一个简单的程序来尝试更好地使用它们。我有两个 classes,我想做的就是为一个随机的人开一个账户,设置余额并从 it.I 中退出不要认为我使用了 setters 和 getters,如果有人可以引导我朝着正确的方向前进,我将不胜感激。

package SetterGettersPractice;

public class account {
private String name;
public double balance =0;
public double withdraw;
public double deposit;
public double getDeposit() {
    return deposit;
}

public void setDeposit(double deposit) {
    this.deposit = deposit;
}

public account(String name, double d){

    this.name = name;
    this.balance = d;
}

private double sumDeposits(){
    balance = balance + deposit;
    return balance;
}
private double sumWithdrawals(){
    balance = balance - withdraw;
    return balance;
}
public double getwithdraw() {
    return withdraw;
}

public void setwithdraw(double withdraw) {
    this.withdraw = withdraw;
}

public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public double getBalance() {
    return balance;
}
public void setBalance(double balance) {
    this.balance = balance;
}
public String toString(){

    return "Name="+name+" balance="+balance;
}

}

这是我的另一个class

package SettersGettersPractice;

public class testAccount {

public static void test1(){

    account a = new account("John Doe", 100);
    a.withdraw(10.0);
    System.out.print("Balance %d", balance);
}
}

如您所见,我计划在弄清楚自己在做什么后尝试扩展该程序。任何帮助新手的建议都很棒!

将数据成员设为私有,就可以了。此外,您可能希望更好地设置代码格式 - 惯例说 class 名称应大写:Account vs account.

方法 setwithdraw 不应该是 setter。它包含更高级的逻辑,所以我宁愿称它为withdraw

你的 class 没有任何名为 withdraw 的方法 在你的测试方法中也没有变量名 balance.

我会调用我在 class 中定义的方法来正确设置和获取如下值

package SettersGettersPractice;

public class testAccount {

public static void test1(){

    account a = new account("John Doe", 100);
    a.setwithdraw(10.0);
    System.out.print("Balance %d", a.sumWithdrawals());
}
}

虽然上面的代码可以给我预期的输出,但我会考虑将我的 class 重命名为帐户(命名约定),我也会将 setwithdraw 重命名为 withdrawsumWithdrawalsgetBalance 基于它们实现的功能。我建议您阅读 Basics of java,其中包括命名约定、代码约定等,然后开始编码。

为什么 getters 和 setters?

您使用得相当正确,但有一些错误。 Getters 和 setters 旨在提供数据的封装

例如,假设您有一个 "Dog" class,它有一个 "weight" 变量

public class Dog {
    int weight;
}

目前,您可以创建 Dog 对象的新实例,并像这样编辑它的权重变量:

Dog dog = new Dog();
dog.weight = 45;

虽然合乎逻辑,但这种做法可能会设置错误的值,可能会搞乱整个程序。例如,使用此设置,有人可以将权重变量设置为负数,这是没有意义的

dog.weight = -50;

如何创建setter方法?

为防止这种情况发生,您可以将 Dog 中的权重变量设为 class private 而不是 public.

public class Dog {
    private int weight;
}

现在,如果您尝试从 class 外部访问该变量,它将被阻止。

dog.weight = 45; // would result in an error

那么,如何让他们再次访问它,而不是提供错误的值?你用 setter!

封装它的数据
public class Dog {
    private int weight;

    public void setWeight(int i) {
        this.weight = i;
    }
}

如何用setter封装(保护你的数据)?

这是创建一个setter。但为确保其数据正确,您需要执行以下操作:

public class Dog {
    int weight;

    public void setWeight(int i) {
        if (i > 0) {
            this.weight = i;
        } else {
            System.out.println("A dog can't have negative weight!");
        }
    }
}

如何创建getter方法?

并且,由于此数据是私有的,这意味着他们无法以任何方式使用它,甚至无法显示它,因此要从对象中检索此变量的值,您将创建一个 getter 方法。

public int getWeight() {
    return weight;
}

如何在您的代码中 use/fire getter 和 setter?

现在要使用这些 getter 和 setter 更改 "Dog" 对象的变量,您可以这样做:

Dog dog = new Dog();
dog.setWeight(45);
System.out.println(dog.getWeight());

如果您还有其他问题,请在评论中提问,我一定会解释的!

如果你想使用 getter 和 setter,你的代码应该像这样 运行 所以:

 account a = new account("John Doe", 100);
    a.setBalance(10.0);

    System.out.print(a.getBalance);

就这么简单:)

P.S。 Class 名字总是以大首字母开头!