2014-03-27 34 views
0

我试图运行此获得空指针异常。为什么?

package mine; 

public class MyFantasticJavaClass { 

    private static String[] myotherarray; 
    public static void main(String[] args) { 
     String[] myarray = {"ball","pen","is","large"}; 
     for(int i=0;i<myarray.length;i++){ 
      myarray[i] = myotherarray[i]; 
     } 
    } 
} 

不过,这并不不管我怎么努力工作。

你能帮助我吗?

误差

Exception in thread "main" java.lang.NullPointerException 
at mine.MyFantasticJavaClass.main(MyFantasticJavaClass.java:9) 
+6

你初始化了'myotherarray'吗? –

+0

为了说明这一点,“myotherarray”必须是一个至少与myarray一样多的元素的数组。相反,它只是......好吧,一点都没有。 –

回答

2

您还没有初始化myotherarray

你的数组必须遵循以下格式String[] myotherarray = new String[length]之前,你也可以添加任何东西了。

为了节省您的进一步错误;你不能从静态main方法读取域myotherarray你已经尝试过的方式,因为静态方法将不会运行所需要的字段的MyFantasticJavaClass一个实例myotherarray

什么你就要做的就是添加到主要方法;

MyFantasticJavaClass name = new MyFantasticJavaClass()   

    String[] myarray = {"ball","pen","is","large"}; 

    name.myotherarray = new String[myarray.length]; 

    for(int i=0;i<myarray.length;i++){ 
     myarray[i] = name.myotherarray[i]; 
    } 

假设目的只是为了所有元素从一个复制到其他,目前原位不动或者它字段的进入主,或其他阵列从不能声明它主要的领域,因为一旦数组被实例化,其长度是不可改变的。

1

您需要先初始化,然后才能读取它。当你说myarray[i] = myotherarray[i];,还没有被设置为任何东西。您期望从这里读取什么值?

2

尚未初始化,因此它等于null。当你试图用null变量做任何事情时,你的JVM(Java虚拟机)不知道该怎么做,所以它会抛出异常。所以,你应该初始化数组是这样的:

private static String[] myotherarray = new String[5]; // change '5' to however many Strings you want your list to hold. 

您可能需要阅读what is a null pointer exception更大的理解。

+0

+1。这是甚至试图帮助OP的唯一答案。 –

0

试试这个

package mine; 

public class MyFantasticJavaClass { 

    private static String[] myotherarray; 
    public static void main(String[] args) { 
     String[] myarray = {"ball","pen","is","large"}; 
     myotherarray = new String[myarray.length]; //myarray.length is the size of the "other" array 
     for(int i=0;i<myarray.length;i++){ 
      myarray[i] = myotherarray[i]; 
     } 
    } 
} 
在Java等语言

你总是初始化变量。 它的这个"myotherarray = new String[...];"