我是Java的新手,在Java中创建了一个对象数组。
我有一个a类的例子
A[] arr = new A[4];
但这只是创建指向A的指针(引用),而不是4个对象。这对吗?我看到,当我试图访问创建的对象中的函数/变量时,我得到一个空指针异常。
为了能够操作/访问对象,我必须这样做:
A[] arr = new A[4];
for (int i = 0; i < 4; i++) {
arr[i] = new A();
}
这是正确的还是我做错了什么?如果这是正确的,那真的很奇怪。
编辑:我觉得这很奇怪,因为在c++中,你只需输入new A[4],它就创建了四个对象。
你说得对。除此之外,如果我们想创建一个特定大小的数组,填充一些“工厂”提供的元素,因为Java 8(引入了流API),我们可以使用下面的一行程序:
A[] a = Stream.generate(() -> new A()).limit(4).toArray(A[]::new);
Stream.generate(() -> new A())类似于以lambda, () -> new A()描述的方式创建的单独A元素的工厂,它是Supplier<A>的实现-它描述了应该如何创建每个新A实例。
Limit(4)设置流将生成的元素数量
toArray(A[]::new)(也可以重写为toArray(size -> new A[size])) -它让我们决定/描述应该返回的数组类型。
对于一些基本类型,你可以使用DoubleStream, IntStream, LongStream,它们还提供了诸如range rangecclosed等生成器。