从另一个类调用静态数组

时间:2014-09-14 17:52:11

标签: java arrays class static global

我有两个程序。我创建了一个静态数组和一些方法,如下所示:

public Someclass{
    static int counter[] = new int[n];

    //methods & main

}

n定义为某个数字,所以我知道它会有一些长度。我后来填充这个数组,我测试看到它被正确填充,所以我知道一些索引应该有除0以外的值。现在当我尝试在第二个程序中调用它时,虽然我从未填充它因为它只给出我0' s。

  //second program 
  public Someclass2{

      public static main(String[] args){
         String n = "someword"
         int[] nums = new int[n.length]
         for( int i = 0; i < n.length; i++){
            nums[i] = nums[i] + (25 * SomeClass.counter[i]); 
          }
      }

 }

由于某种原因,当我在第二个程序中调用数组时,它返回所有零并且不会更改nums的值,即使我知道计数器数组应该具有非零值。我认为这与我静态初始化它的事实有关,但我在本地方法和类中填充它。所以从技术上来说,它永远不会让它的零更新。我无法解决这个问题,如果有人能提供帮助,我会非常感激。

谢谢

4 个答案:

答案 0 :(得分:2)

我的猜测:您正在填充SomeClass中的数组,但在其他类中使用该数组之前从不调用该填充代码。解决方案:务必先填写。有关更具体的帮助,请向我们显示有关代码的更多详细信息。

其他要点 - 通常最好避免使用静态字段,而通常最好将数组设为实例字段。然后你可以通过它的包含类来确定它的状态,并通过包含类来改变它的状态,你有任何限制,你想要改变它。

答案 1 :(得分:0)

如果第二个节目&#39;它实际上是一个单独的程序,而不仅仅是另一个类,它不会按照你想要的方式工作。当第二个程序调用静态类时,它只会为第二个程序创建一个新数组,而第一个程序中填充的原始数组将持续存在于第一个程序中。静态变量只能由同一程序的其他部分访问,而不是计算机上运行的所有程序。

答案 2 :(得分:0)

问题在于:nums[i] = nums[i] + (25 * SomeClass.counter[i]);

基本上你已经创建了一个数组并且没有填充它。
所以如果n = 5那么counter == {0,0,0,0,0}

这意味着每个索引都会得到0的默认值,所以每次执行此操作时:
25 * SomeClass.counter[i]乘以0,当然会返回0

答案 3 :(得分:0)

Someclass2.main()中没有任何事情会导致Someclass中的静态数组被填充。它全是零,因为这就是Java spec defines it

的方式
  

每个类变量,实例变量或数组组件在创建时都使用默认值进行初始化(§15.9,§15.10)[...]对于int类型,默认值为零,即0。

第二个程序永远不会修改Someclass.counter的状态,从而导致全部为零。