在另一个方法中调用另一个方法?

时间:2017-12-17 17:24:55

标签: java methods

我是Java新手,我正在尝试理解一段代码:

public class Image {
...
public float getPixel(int height, int width) {
    return data[height][width];
}
public void setPixel(float value, int height, int width) {
    if (value > getMax())
        value = getMax();
    if (value < 0)
        value = 0;

    data[height][width] = value;
}

private Image(String magicNumber, int height, int width, float max) {
    this.magicNumber = magicNumber;
    this.width = width;
    this.height = height;
    this.max = max;
    data = new float[height][width];
}
...
public Image clone() {
    Image clone = new Image(getMagicNumber(), getHeight(), getWidth(), getMax());
    for (int i = 0; i < getHeight(); i++) {
        for (int j = 0; j < getWidth(); j++) {
            clone.setPixel(getPixel(i, j), i, j); /** trying to understand this line */
        }
    }

    return clone;
}

clone.setPixel(getPixel(i, j), i, j);究竟做了什么?而我最不理解的是clone.之前setPixel(getPixel(i, j), i, j);正在做什么?

2 个答案:

答案 0 :(得分:0)

此方法正在创建调用该方法的对象的副本。 第一个“clone”是方法的名称,第二个(也是第三个)是应该返回的Image的实例。

clone.setPixel(getPixel(i, j), i, j);

此方法使用当前对象等效属性设置结果对象的像素(即Image)。

  

而我最不理解的是clone.之前的setPixel(getPixel(i, j), i, j);是做什么的?

正如我上面所说,它只是方法setPixel所来自的实例名称。 getPixel(i, j)正在调用当前对象,因此它等同于this.getPixel(i, j)

答案 1 :(得分:0)

首先,您应该了解Class,Instance和Method之间的区别。其次,我认为命名一个具有相同名称clone的实例和方法是一种不好的做法。

在此示例中,您有一个类Image,一个构造函数private Image(String magicNumber, int height, int width, float max)在使用运算符new创建新对象时隐式使用,您还有方法{{1} }用于检索某个坐标public float getPixel(int height, int width)处的一个像素的值,另一个方法void (int height, int width)用于设置某个坐标处的像素值,最后一个方法setPixel(float value, int height, int width)它应该重构为

public Image clone()

我刚刚将public Image clone() { Image imageInstance = new Image(getMagicNumber(), getHeight(), getWidth(), getMax()); for (int i = 0; i < getHeight(); i++) { for (int j = 0; j < getWidth(); j++) { imageInstance.setPixel(getPixel(i, j), i, j); /** trying to understand this line */ } } return imageInstance; } 实例的名称更改为Image,实际上这个方法非常简单明了,只需创建imageInstance的新对象然后遍历所有当前对象中的像素,并将该像素复制到Image

的相同位置

现在行imageInstance包含2个方法调用imageInstance.setPixel(getPixel(i, j), i, j); /** trying to understand this line */setPixel第一个要执行的方法是内部getPixel它将检索当前值像素,外部方法将被称为getPixel,它将使用setPixel方法中的值来设置getPixel的坐标i, j处的像素值

最终结果将是当前imageInstance实例

的精确副本