【问题标题】:Initializing array of objects in Java在Java中初始化对象数组
【发布时间】:2015-01-27 05:16:27
【问题描述】:

我需要帮助来了解如何在 Java 中初始化一个类的对象。

我的代码是这样的:

...
Test t[] = null;
...
for (i=0;i<20;i++)
   t[i] = new Test(10,20);
...

当我在 Eclipse 中编写上面的代码时,它给我一个错误说“空指针访问:变量数据只能在这个位置为空”。

我尝试了所有纠正错误的方法,但没有运气。

【问题讨论】:

    标签: java arrays initialization array-initialization


    【解决方案1】:

    你需要为数组本身分配空间,然后初始化它们的元素。

    Test[] t = new Test[20];
    for (i = 0; i < 20; i++) {
        t[i] = new Test(10, 20);
    }
    

    如果数组的长度是可变的,您可以像传递任何其他变量一样传递值。

    int arraySize = 35;
    Test[] t = new Test[arraySize];
    for (i = 0; i < arraySize; i++) {
        t[i] = new Test(10, 20);
    }
    

    数组大小在初始化后是固定的,但您始终可以使用arr.length 属性获取数组的长度。

    【讨论】:

    • 如果我不知道它会占用多少空间怎么办?实际上,该空间是在运行时确定的
    • @Anshuman 看看我的回答,还有 Java ArrayList 类。
    • @Alexis:谢谢。我已经这样做了。我在问,是否有不同的方法。
    【解决方案2】:

    您需要通过指定数组的大小来初始化数组。

    Test[] t = new Test[20];

    如果您不想限制数组大小。你可以考虑使用ArrayList,随着元素添加到ArrayList,它的容量会自动增长。

    List&lt;Test&gt; testList = new ArrayList&lt;Test&gt;();

    【讨论】:

      【解决方案3】:

      在 Java 中,对象数组是不可变的并且必须被初始化。

      要做的事情很少。

      您可以在分配期间提供元素:

      Test t[] = { new Test(10, 20), new Test(30, 40) };
      

      如果你不知道这些值,你可以给数组分配正确的分配:

      Test t[] = new Test[4];
      

      在您的情况下,您仍然需要初始化数组。

      一般来说,声明时不需要这样做,除非变量是 final 的。

      Test t[];            // declaration
      
      t[] = new Test[20];  // assignment
      
      for ( i=0 ; i<20 ; i++ ) {
      
          t[i] = new Test(10,20);
      
      }
      

      Java 也有一组类可以处理列表、数组、键值集和链表。

      如果您需要使用可变数组,请使用ArrayList 对象。

      这将允许您避免初始化。

      这是一个简单的例子:

      ArrayList<Test> t = new ArrayList<Test>();
      
      for( i=0 ; i<20 ; i++ ) {
      
          t.add(new Test(10,20));
      
      }
      

      与不可变对象数组相比,可变列表成本高昂,但 Java 编码人员确实使用 System.arraycopy() 函数调整了 ArrayList 类。

      因此您不会看到性能下降太多。

      简单地说,只有在您完全无法知道所需的分配空间时才使用可变的 ArrayList。

      【讨论】:

      • 谢谢。这很有帮助:)
      【解决方案4】:

      需要像下面一样初始化你的数组 test[] 然后使用它

      Test[] t = new Test[20];
      

      【讨论】:

        【解决方案5】:

        在 java 中,数据类型可以是原始的或引用的。引用类型是类或接口类型或数组类型。 当你要创建一个对象数组时,首先需要声明并实例化数组对象本身,然后实例化该类所需的对象并将它们分配给数组对象。

         ArrayDataType[] ArrayName=new ArrayDataType[Dimensions];
            for(int i=0;i<Dimensions;i++){
            Arrayname[i]=new ObjectDataType();  
            \\ where the ObjectDatatype can be either ArrayDataType or SubType
            }
        

        【讨论】:

        • 这和问题有什么关系?
        • 你好,八月,我之前偶然提交的答案,正在修改它,现在做了,希望对你有帮助
        【解决方案6】:

        试试

        Test[] t = new Test[20];
        

        当您将 t 设置为 null 时,它会尝试访问不存在的数组。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-22
          • 1970-01-01
          • 2017-02-16
          相关资源
          最近更新 更多