Java 为什么为区域引入实例变量不是一个好主意?那你怎么修呢?

Java 为什么为区域引入实例变量不是一个好主意?那你怎么修呢?,java,Java,为什么为区域引入实例变量不是一个好主意?如何修复它呢,谢谢你每次调用'getArea()'都在计算面积。因此,您应该计算并返回它,或者在构造函数中计算并在方法调用时返回它。因为对于正方形,面积完全由边长决定。当你可以简单地说 public class Square { private int sideLength; private int area; // Not a good idea public Square(int length) { s

为什么为区域引入实例变量不是一个好主意?如何修复它呢,谢谢你每次调用'getArea()'都在计算面积。因此,您应该计算并返回它,或者在构造函数中计算并在方法调用时返回它。

因为对于正方形,
面积
完全由
边长
决定。当你可以简单地说

public class Square {
    private int sideLength;
    private int area;     // Not a good idea

    public Square(int length) {
        sideLength = length; 
    }

    public int getArea() {
        area = sideLength * sideLength;
        return area; 
    }
}
并完全消除
区域


另外,存储冗余私有变量有一个有效的用例,特别是当计算它是一个昂贵的操作并且您只想在需要时执行它时。这称为缓存。但是乘法运算非常便宜,在您的情况下没有理由这样做,而且不管怎样,每次调用
getArea()
时,您都在计算
area
,因此即使计算成本很高,也不会对性能有任何好处。

这不是一个好主意,因为存储它没有意义。您总是可以再次计算它(如果计算过程非常耗时,您应该存储它)。 你可以做:

public int getArea() {
    return sideLength * sideLength; 
}
并改用局部变量。甚至更短:

public class Square {
    private int sideLength;

    public Square(int length) {
        sideLength = length;
    }

    public int getArea() {
        int area = sideLength * sideLength;
        return area;
    }
}

代码格式问题——请学习并应用它,你认为你的家庭作业问题的答案是什么?这有点像询问我的出生日期和年龄-当你可以根据我的出生日期计算时,真的没有必要询问年龄。根据发布的代码,不在构造函数中只计算面积变量是不好的做法,因为类只有
getArea
方法。我有点理解在这里展示衍生价值的例子的意图,但是选择的例子不是最好的。谁能给我解释一下为什么?或者纠正我写的,他们认为是错误的?
...
public int getArea() {
    return sideLength * sideLength;
}
...