Java 从另一个类调用静态数组
我有两个节目。我创建了一个静态数组和一些方法,例如:Java 从另一个类调用静态数组,java,arrays,class,static,global,Java,Arrays,Class,Static,Global,我有两个节目。我创建了一个静态数组和一些方法,例如: public Someclass{ static int counter[] = new int[n]; //methods & main } n被定义为一个数字,所以我知道它有一定的长度。稍后我填充这个数组,并测试它是否被正确填充,因此我知道一些索引应该具有0以外的值。现在当我试着在第二个程序中调用它时,虽然我从未填充它,因为它只给我0 //second program public Someclas
public Someclass{
static int counter[] = new int[n];
//methods & main
}
n被定义为一个数字,所以我知道它有一定的长度。稍后我填充这个数组,并测试它是否被正确填充,因此我知道一些索引应该具有0以外的值。现在当我试着在第二个程序中调用它时,虽然我从未填充它,因为它只给我0
//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]);
}
}
}
//第二个程序
公共服务类别2{
公共静态main(字符串[]args){
String n=“someword”
int[]nums=新的int[n.length]
for(int i=0;i
出于某种原因,当我在第二个程序中调用数组时,它会返回所有零,并且不会更改nums的值,即使我知道计数器数组应该具有非零值。我认为这与我静态初始化它有关,但我在本地方法和类中填充了它。所以从技术上讲,它永远不会更新它的零。我在试图解决这个问题时遇到了困难,如果有人能帮助我,我会很感激的
谢谢我的猜测:您正在某个类中填充数组,但在另一个类中使用数组之前,千万不要调用该填充代码。解决方法:一定要先填好。有关更具体的帮助,请向我们展示有关代码的更多详细信息
其他要点——通常最好避免使用静态字段,相反,最好将数组设置为实例字段。然后,您可以通过它的包含类确定它的状态,也可以通过包含类更改它的状态,并对更改它的能力施加任何限制。如果第二个“程序”实际上是一个单独的程序,而不仅仅是另一个类,那么它将无法按您希望的方式工作。当第二个程序调用静态类时,它将只为第二个程序创建一个新数组,而您在第一个程序中填充的原始数组将保留给第一个程序。静态变量只能由同一程序的其他部分访问,而不是计算机上运行的所有程序。问题在于:
nums[i]=nums[i]+(25*SomeClass.counter[i])代码>
基本上你已经创建了一个数组,但是没有填充它。
所以如果n=5
那么计数器=={0,0,0,0}
这意味着每个索引都会获得默认值0
,因此每次执行此操作时:
25*SomeClass.counter[i]
乘以0
,当然返回0Someclass2.main()中不会发生任何事情
这将导致填充Someclass
中的静态数组。它都是零,因为这就是:
每个类变量、实例变量或数组组件在创建时都使用默认值初始化(§15.9、§15.10)[…]对于int类型,默认值为零,即0
第二个程序从不修改Someclass.counter的状态,结果得到全零。什么时候调用Someclass中修改计数器数组的本地方法?静态数组初始化为全零。你没有把价值放进去。如果您已经处理了值。在main方法中没有对它的调用。