java - 在多个方法调用上使变量持久化

时间:2017-03-11 17:49:49

标签: java

我想要一个名为" number"的变量多次调用该方法时保持相同的值。它似乎在每个方法调用之间重置。我不明白为什么会这样,因为变量是在方法之外声明的。

这是第一堂课:

import java.util.Scanner;

public class Input {

    public static void main(String[] args) {

        for(int counter = 0; counter < 5; counter++) {
            Output display = new Output();
            display.outputNumber();
        }

    }

}

这是第二堂课:

public class Output {

    int number;

    public void outputNumber() {
        number++;
        System.out.println(number);
    }

}

当我运行它时,它会输出

1
1
1
1
1

我希望它输出:

1
2
3
4
5

3 个答案:

答案 0 :(得分:2)

在循环外移动这行代码:<5应该可以得到所需的输出。

每次创建新对象时,该对象的编号都会初始化为0,这说明了当前的输出。 重用该对象会重复使用数字,因此您可以获得所需的输出。

答案 1 :(得分:1)

每次创建new Output()时,都会创建一个从头开始的新对象。在这种情况下,您将创建5个新对象,每个对象只增加一次,并获得1个系列。

您可能希望在循环外部创建单个Output,然后只需在循环内增加。这样它就是同一个对象,因此保持了这些值。

答案 2 :(得分:0)

为每个循环创建了Output对象,并且number类的Output变量始终实例化为默认int值0。因此,每次将0增加到1并仅显示1

您可以放弃递增number类中的Output变量,并在实际类中执行增量并将值传递给Output类。

public class Output {
    int number;
    public Output (int number) {
        this.number = number;
    }
    public void outputNumber() {
        System.out.println(number);
    }
}

并相应地将您对Output课程的调用也从for课程中的Input循环更改。

您还可以将for循环counter变量实例从0更改为1,并将条件检查更改为<=5而不是{{ 1}}。