【问题标题】:Calling a private static variable in java from a different class从不同的类调用java中的私有静态变量
【发布时间】:2013-08-16 01:12:24
【问题描述】:

我认为这可能是一个直截了当的问题,但我有一个类有一个私有静态 int 变量,该变量在类中递增,我想在第二个类中显示这个值。但是,即使它已经增加,它仍然会打印出 0。

同样的代码

public class Test{

      private static int toIncrement;

      public static int returnValue{
          return toIncrement;
      }

      public void test{
         for(int i = 0; i < 4; i++){
               toIncrement++;
         }
      }
 }

所以上面的代码运行,然后我从另一个类调用 Test.returnValue(); 这将返回 0

【问题讨论】:

  • @HovercraftFullOfEels 都在那里。
  • @hexafraction:啊,上面的代码甚至无法编译。致原发帖人​​:请不要浪费我们的时间发布“垃圾”代码供我们审查。如果您遇到严重问题并需要认真的帮助,请仅发布真实代码。
  • 你的类首先是如何编译的。
  • 你知道如何用Java编写方法吗?

标签: java class static


【解决方案1】:

所以上面的代码运行,然后从我调用的另一个类 测试.returnValue();这将返回 0

当您说上面的代码运行时,并不意味着您的test 方法会自动执行,而不会从任何地方调用。如果您先调用test 方法,然后尝试获取Test.returnValue(),则该值不应为0。

【讨论】:

    【解决方案2】:

    您忘记了方法中的参数括号。 应该是:

    public class Test{
    
        private static int toIncrement;
    
        public static int returnValue(){
        return toIncrement;
        }
    
        public void test(){
        for(int i = 0; i < 4; i++){
            toIncrement++;
        }
    }
    

    但是看到你没有在任何地方调用 test(),我假设你认为它是一个构造函数。为了使它的构造函数删除“void” 所以它只是:

    public test()
    {
        code here
    }
    

    当你这样做时,代码将在你运行程序时自动运行(只要这是你的主类,如果不是你需要创建它的一个实例以便构造函数运行。)

    【讨论】:

      【解决方案3】:

      叹息。我从哪里开始?

      public void test{
        for(int i = 0; i < 4; i++){
              toIncrement++;
        }
      }
      

      这不是构造函数。它需要删除void。由于缺少括号,这甚至无效。

      public static int returnValue{
        return toIncrement;
      }
      

      再次,括号。

      private static int toIncrement;
      
      public static int returnValue{
          return toIncrement;
      }
      

      这真的是静态的吗?要么将其设为静态,然后调用Test.test(),要么将其设为非静态并正确调用构造函数。

      【讨论】:

      • “即使是这样,它也没有用,因为toIncrement 是静态的,它会坏掉。” 它不会坏掉。静态变量可以在非静态上下文中使用(只有相反的情况是不正确的)。
      • @arshajii 谢谢,虽然现在看起来很直观,但我总是很难混淆 2。
      【解决方案4】:

      使用静态块!

      public class Test{
      
            private static int toIncrement;
      
            public static int returnValue(){
                return toIncrement;
            }
      
            static {
               for(int i = 0; i < 4; i++){
                     toIncrement++;
               }
            }
       }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-04
        相关资源
        最近更新 更多