Saya baru ke Jawa dan untuk saat ini membuat array objek di Jawa.
Saya punya kelas A misalnya -
A[] arr = new A[4];
Tapi ini hanya membuat pointer (referensi) ke A
dan bukan 4 objek. Apakah ini benar? Saya melihat bahwa ketika saya mencoba mengakses fungsi / variabel dalam objek yang dibuat saya mendapatkan pengecualian pointer nol. Untuk dapat memanipulasi / mengakses objek saya harus melakukan ini:
A[] arr = new A[4];
for (int i = 0; i < 4; i++) {
arr[i] = new A();
}
Apakah ini benar atau saya melakukan sesuatu yang salah? Jika ini benar itu benar-benar aneh.
EDIT: Saya menemukan ini aneh karena di C ++ Anda baru saja mengatakan baru A[4]
dan itu menciptakan empat objek.
Jawaban:
Ini benar.
... membuat 4
A
referensi, mirip dengan melakukan ini:Sekarang Anda tidak dapat melakukan
a1.someMethod()
tanpa mengalokasikana1
seperti ini:Demikian pula, dengan array yang perlu Anda lakukan ini:
... sebelum menggunakannya.
sumber
new
kata kunci Java juga memanggil konstruktor dan mengalokasikan memori I. Saya kira di Jawanew
hanya membuat referensi bukan objek yang sebenarnya dibandingkan dengan C ++. Terima kasih atas jawabannya.new
menciptakan objek array. Ini adalah objek yang dialokasikan secara dinamis ("heap"). Jadi kode C ++ analog akanA **a = new A*[4]; for (int i = 0; i < 4; ++i) { a[i] = new A(); }
.Ini benar. Anda juga dapat melakukan:
Sintaks ini juga dapat digunakan untuk membuat dan menginisialisasi array di mana saja, seperti dalam argumen metode:
sumber
Ya, itu hanya membuat referensi, yang ditetapkan ke nilai standarnya nol. Itu sebabnya Anda mendapatkan NullPointerException Anda perlu membuat objek secara terpisah dan menetapkan referensi. Ada 3 langkah untuk membuat array di Jawa -
Jadi, sampai kita instantiate referensi tetap nol. Saya harap jawaban saya telah membantu Anda ..! :)
Sumber - Array di Jawa
sumber
Berikut adalah contoh yang jelas untuk membuat array 10 objek karyawan, dengan konstruktor yang mengambil parameter:
sumber
Anda benar. Selain itu jika kita ingin membuat array dengan ukuran tertentu yang diisi dengan elemen-elemen yang disediakan oleh beberapa "pabrik", karena Java 8 (yang memperkenalkan stream API ) kita dapat menggunakan satu-baris ini:
Stream.generate(() -> new A())
seperti pabrik untuk elemen A terpisah yang dibuat dengan cara yang dijelaskan oleh lambda,() -> new A()
yang merupakan implementasi dariSupplier<A>
- itu menggambarkan bagaimana setiap instance A baru harus dibuat.limit(4)
menetapkan jumlah elemen yang akan dihasilkan alirantoArray(A[]::new)
(dapat juga ditulis ulang sebagaitoArray(size -> new A[size])
) - memungkinkan kita memutuskan / menjelaskan jenis array yang harus dikembalikan.Untuk beberapa tipe primitif Anda dapat menggunakan
DoubleStream
,IntStream
,LongStream
yang juga menyediakan generator sepertirange
rangeClosed
dan beberapa orang lainnya.sumber
Ya benar di Jawa ada beberapa langkah untuk membuat array objek:
Mendeklarasikan dan kemudian Instantiating (Buat memori untuk menyimpan objek '4'):
Menginisialisasi Objek (Dalam hal ini Anda dapat Menginisialisasi 4 objek kelas A)
atau
Sekarang Anda dapat mulai memanggil metode yang ada dari objek yang baru saja Anda buat dll.
Sebagai contoh:
atau
sumber
Untuk kelas generik perlu membuat kelas pembungkus. Sebagai contoh:
menghasilkan: "Tidak dapat membuat array generik"
Gunakan sebaliknya:
sumber
Bentuk umum untuk mendeklarasikan array baru di java adalah sebagai berikut:
type arrayName[] = new type[numberOfElements];
Di mana tipe adalah tipe atau Objek primitif.
numberOfElements
adalah jumlah elemen yang akan Anda simpan ke dalam array dan nilai ini tidak dapat berubah karena Java tidak mendukung array dinamis (jika Anda membutuhkan struktur yang fleksibel dan dinamis untuk memegang objek Anda mungkin ingin menggunakan beberapa koleksi Java).Mari kita inisialisasi array untuk menyimpan gaji semua karyawan di sebuah perusahaan kecil yang terdiri dari 5 orang:
int salaries[] = new int[5];
Jenis array (dalam hal ini
int
) berlaku untuk semua nilai dalam array. Anda tidak dapat mencampur tipe dalam satu array.Sekarang kita memiliki larik gaji yang diinisialisasi, kami ingin memasukkan beberapa nilai ke dalamnya. Kita dapat melakukan ini selama inisialisasi seperti ini:
int salaries[] = {50000, 75340, 110500, 98270, 39400};
Atau untuk melakukannya di titik selanjutnya seperti ini:
Lebih banyak contoh visual pembuatan array:
Untuk mempelajari lebih lanjut tentang Array, lihat panduan ini .
sumber