【问题标题】:getting null pointer exception. why? [duplicate]获取空指针异常。为什么? [复制]
【发布时间】:2014-03-27 23:36:13
【问题描述】:

我正在尝试运行它

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)

【问题讨论】:

  • 你初始化myotherarray了吗?
  • 为此,myotherarray 必须是一个数组,其元素数至少与myarray 一样多。相反,它只是......好吧,什么都没有。

标签: java


【解决方案1】:

你还没有初始化 myotherarray

您的数组必须遵循 String[] myotherarray = new String[length] 的格式,然后才能添加任何内容。

为了让您避免更多错误;您无法按照您尝试的方式从静态主方法中读取字段 myotherarray ,因为静态方法不会运行 MyFantasticJavaClass 的实例化,这是字段 myotherarray 所必需的

你要做的就是添加到 main 方法中;

 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];
     }

假设目的只是将所有元素从一个复制到另一个,目前你不能在原地声明它而不将它移出域到主,或者另一个数组从主到字段,因为一旦一个数组被实例化,它的长度是不可改变的。

【讨论】:

    【解决方案2】:

    myotherarray 尚未初始化,因此它等于 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 以获得更好的理解。

    【讨论】:

    • +1。这是甚至试图帮助 OP 的唯一答案。
    【解决方案3】:

    您需要先初始化myotherarray,然后才能从中读取。当您说myarray[i] = myotherarray[i]; 时,myotherarray 尚未设置为任何内容。您希望从这里读取什么值?

    【讨论】:

      【解决方案4】:

      试试这个

      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[...];"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-26
        • 2016-01-30
        • 1970-01-01
        相关资源
        最近更新 更多