【问题标题】:How do I get a private variable in the main method that was set in a different method?如何在不同方法中设置的主要方法中获取私有变量?
【发布时间】:2020-05-09 04:29:48
【问题描述】:

我正在尝试更改方法中的私有变量,然后在 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());
    }
}

【问题讨论】:

  • 你知道类的实例是什么吗?你知道static 是什么意思吗?
  • 它应该输出 0,然后是 4,然后又是 0。你应该研究一下课程是如何运作的,这里可能已经有很多类似的问题,以及关于课程如何在互联网上运作的指南和教程。无论哪种方式,只有 tester.TheTestExample() 在打印之前实际设置了值。

标签: java methods getter-setter getter setter


【解决方案1】:

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

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

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

    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 不是私有变量。它是一个局部变量。局部变量没有/不能有访问修饰符。称它们为“私人”在技术上是不正确的,而且令人困惑。 (对其他人,也可能对您而言。)

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

【讨论】:

    【解决方案2】:
    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
    }
    

    }

    【讨论】:

      【解决方案3】:

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

      如果你想在 main() 中打印在 TheTestExample() 中设置的值,你可以从这个方法返回新设置的值。 公共类示例 {

      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();**
      }
      

      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-05
        • 1970-01-01
        • 2012-02-20
        • 2020-06-09
        • 2013-07-27
        • 2015-01-15
        相关资源
        最近更新 更多