如何在 main 方法中获取在不同方法中设置的私有变量?

How do I get a private variable in the main method that was set in a different method?

我试图在方法中更改私有变量,然后在 main 方法中使用 getter 方法访问它们(如下所示),但是当我在 main 方法中获取私有变量时,它是始终为 0。如何在 main 方法之外的方法中设置私有变量,但仍然能够在 main 方法中访问该变量?

public class Example {

    private int testNumber;

    public static void main(String[] args) {
        Example tester = new Example();
        System.out.println(tester.getTestNumber());
        tester.TheTestExample();
        System.out.println(tester.getTestNumber());
    }

    public int getTestNumber(){
        return testNumber;
    }

    public void setTestNumber(int x){
        this.testNumber = x;
    }

    public void TheTestExample(){
        Example MyTester = new Example();
        MyTester.setTestNumber(4);
        System.out.println(MyTester.getTestNumber());
    }
}

您的应用程序创建了两个单独的 Example 实例。一个由 main 创建,另一个由 TheTestExample

创建

您似乎要问的是 main 如何在您的 TheTestExample 方法版本中的 MyTester 变量中获取对 Example 实例的引用。

答案是不能。您不能访问其范围之外的局部变量。该方法需要return那个变量中的引用,调用者需要保存它或者直接使用它。例如。

    tester = tester.theTestExample();
    System.out.println(tester.getTestNumber());

public Example theTestExample(){
    Example myTester = new Example();
    MyTester.setTestNumber(4);
    System.out.println(MyTester.getTestNumber());
    return myTester;
}

顺便说一句:

  • MyTester 不是私有变量。它是一个局部变量。局部变量没有/不能有访问修饰符。称它们为 "private" 在技术上是不正确的,并且令人困惑。 (对于其他人,可能也适用于您。)

  • MyTesterTheTestExample 严重违反了 Java 风格约定。方法和变量名称应始终以 小写 字母开头。

在您的代码中,您正在为 Test class 创建 2 个对象,一个在 main 方法中,另一个在 TheTestExample() 方法中。 并且您在 TheTestExample () 中为私有变量设置值 4。

如果您想打印在 main () 中的 TheTestExample() 中设置的值,您可以 return 从该方法中新设置的值。 public class 示例 {

private int testNumber;

public static void main(String[] args) {
    Example tester = new Example();
    System.out.println(tester.getTestNumber());


    **System.out.println(tester.TheTestExample());** // it prints the value return from the method
}

public int getTestNumber(){
    return testNumber;
}

public void setTestNumber(int x){
    this.testNumber = x;
}

public int TheTestExample(){
    Example MyTester = new Example();
    MyTester.setTestNumber(4);
    System.out.println(MyTester.getTestNumber());
    **return MyTester.getTestNumber();**
}

}

public class Example {
private int testNumber;

public static void main(String[] args) {
    Example tester = new Example();
    System.out.println(tester.getTestNumber()); //prints "0"
    tester.TheTestExample(); //print "4"
    System.out.println(tester.getTestNumber()); //print "0" Why? ;) See the method TheTestExample -> print4() for now it is a better name
}

public int getTestNumber(){
    return testNumber;
}

public void setTestNumber(int x){
    this.testNumber = x;
}

public void TheTestExample(){
    Example MyTester = new Example(); //local instance, @Answer we lost  this object. If you want to change testNumber here. If you want to have access to this object please return and use in main method 
    MyTester.setTestNumber(4); //setFour
    System.out.println(MyTester.getTestNumber()); //result in line 8
}

}