用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一个对象数组:
-
声明然后实例化(创build内存来存储'4'对象):
A[ ] arr = new A[4];
-
初始化对象(在这种情况下,您可以初始化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);