用Java创build一个对象数组

我是Java新手,并且在Java中创build了一个对象数组。

我有一个例如A类 –

A[] arr = new A[4]; 

但是这只是创build指针(引用)到A而不是4个对象。 它是否正确? 我看到,当我尝试访问创build的对象中的函数/variables时,我得到一个空指针exception。 为了能够操作/访问对象,我必须这样做 –

 A[] arr = new A[4]; for( int i=0; i<4; i++ ) arr[i] = new A(); 

这是正确的还是我做错了什么? 如果这是正确的,那真的很奇怪。

编辑:我觉得这很奇怪,因为在C ++中,你只是说新的A [4],它创build了四个对象。

这是对的。

 A[] a = new A[4]; 

创build4个引用,类似于这样做

 A a1; A a2; A a3; A a4; 

现在你不能做a1.someMethod()而不分配a1

 a1 = new A(); 

同样,与你需要做的arrays

 a[0] = new A(); 

在使用之前。

这是对的。 你也可以这样做:

 A[] a = new A[] { new A("args"), new A("other args"), .. }; 

是的,它只创build引用,它们被设置为默认值null。 这就是为什么你得到一个NullPointerException你需要分别创build对象并分配引用。 有三个步骤来创buildJava中的数组 –

声明 – 在这一步中,我们指定数据types和我们要创build的数组的维数。 但请记住,我们没有提到尺寸的大小呢。 他们留空。

实例化 – 在这一步中,我们使用new关键字创build数组,或为数组分配内存。 正是在这一步中,我们提到了数组维度的大小。

初始化 – 数组始终初始化为数据types的默认值。 但是我们可以做出自己的初始化。

在Java中声明数组

这是我们如何在Java中声明一个一维数组 –

 int[] array; int array[]; 

Oraclebuild议您使用前面的语法来声明数组。 以下是其他法律声明的例子 –

 // One Dimensional Arrays int[] intArray; // Good double[] doubleArray; // One Dimensional Arrays byte byteArray[]; // Ugly! long longArray[]; // Two Dimensional Arrays int[][] int2DArray; // Good double[][] double2DArray; // Two Dimensional Arrays byte[] byte2DArray[]; // Ugly long[] long2DArray[]; 

这些是非法声明的一些例子 –

 int[5] intArray; // Don't mention size! double{} doubleArray; // Square Brackets please! 

实例化

这是我们如何“实例化”,或为数组分配内存 –

 int[] array = new int[5]; 

当JVM遇到new关键字时,它理解它必须为某个东西分配内存。 通过指定int[5] ,我们的意思是我们需要一个大小为5的int数组。因此,JVM创build内存并将新分配的内存的引用赋值给一个types为“ int[] ”的“引用” int[]

初始化

使用循环 – 使用for循环来初始化数组的元素是获取数组最常用的方法。 如果您要指定默认值本身,则不需要运行for循环,因为JVM会为您执行此操作。

一体..! – 我们可以一次声明,实例化和初始化我们的数组。 这里的语法 –

 int[] arr = {1, 2, 3, 4, 5}; 

在这里,我们没有提到大小,因为JVM可以看到我们给出了5个值。

所以,直到我们实例化的引用保持为空。 我希望我的回答帮助你..! 🙂

源代码 – Java中的数组

下面是创build10个员工对象的数组的清晰示例,带有一个构造函数,其参数为:

 public class MainClass { public static void main(String args[]) { System.out.println("Hello, World!"); //step1 : first create array of 10 elements that holds object addresses. Emp[] employees = new Emp[10]; //step2 : now create objects in a loop. for(int i=0; i<employees.length; i++){ employees[i] = new Emp(i+1);//this will call constructor. } } } class Emp{ int eno; public Emp(int no){ eno = no; System.out.println("emp constructor called..eno is.."+eno); } } 

是的,在Java中是正确的,有几个步骤来创build一个对象数组:

  1. 声明然后实例化(创build内存来存储'4'对象):

     A[ ] arr = new A[4]; 
  2. 初始化对象(在这种情况下,您可以初始化A类的4个对象)

     arr[0] = new A(); arr[1] = new A(); arr[2] = new A(); arr[3] = new A(); 

    要么

     for( int i=0; i<4; i++ ) arr[i] = new A(); 

现在你可以开始从刚刚制作的对象中调用现有的方法了。

例如:

  int x = arr[1].getNumber(); 

要么

  arr[1].setNumber(x);