您何时应该直接使用获取方法与调用变量?

时间:2018-03-05 05:08:18

标签: java global-variables

好吧所以我发现如果你有一个带有全局变量的类,你只需要说class.variable就可以在另一个类中调用它,现在我很困惑为什么getVariable和setVariable方法存在于他们的'已经可以访问了

所以我们假设我们有这两个类

public class MyClass {
    public int num;
    public String str;
    public MyClass (int num, String str) {
        this.num = num;
        this.str = str;
    }
    public int getNum () {
        return num;
    }
    public String getStr () {
        return str;
    }
}
public class test {
    public static void main (String[] args) {
        MyClass x = new MyClass (3, "string");
        System.out.println(x.num);
        System.out.println(x.str);
        System.out.println(x.getNum());
        System.out.println(x.getStr());
        x.num = 4;
        System.out.println(x.num);
    }
}

两种方式,它从对象访问相同的数据并输出相同的内容。是一种比另一种方式更好的做法,还是某些方法不适用?

1 个答案:

答案 0 :(得分:2)

简短回答:封装。

一个主要的好处是防止其他类或模块,尤其是你不写的类,滥用你创建的类的字段。

例如,您可以使用实例变量int作为其中一个类方法的分母。您知道在编写代码时从不将此变量赋值为0,您甚至可以在构造函数中进行一些检查。问题是其他一些人可能会实例化你的类,然后为实例变量赋值为0,从而在以后调用使用此变量作为分母的方法时抛出异常(你不能除以0)。

使用setter编写代码,保证此变量的值永远不会为0。

另一个优点是,如果你想在实例化类之后只读取实例变量,那么你可以将变量设为私有,只定义getter方法而不定义setter。