Rumah  >  Artikel  >  Java  >  array[]: kelas khas yang diuruskan secara dalaman oleh JVM itu sendiri

array[]: kelas khas yang diuruskan secara dalaman oleh JVM itu sendiri

DDD
DDDasal
2024-09-12 20:16:10850semak imbas

Cara pertama kita semua diperkenalkan kepada kajian struktur data dalam Java (dan bahasa lain) adalah melalui tatasusunan. Di Java, tatasusunan ialah kelas, objek, anak Objek (seperti semua kelas). Walau bagaimanapun, ia adalah kelas dengan layanan istimewa dalam bahasa.

Tidak seperti kelas dan objek biasa, sintaks tatasusunan dan rawatannya diuruskan secara langsung oleh pengkompil dan JVM (Mesin Maya Java). Ini termasuk cara tatasusunan diperuntukkan, dimanipulasi dan diakses. Kelas ini tidak ditemui secara langsung dalam kod sumber.

Java secara automatik merawat tatasusunan sebagai tika kelas khas ini.

Jika anda menjalankan kod di bawah, anda akan melihat output berikut:

public class Main
{
    public static void main(String[] args) {
        int[] intArray = new int[5];
        System.out.println(intArray.getClass().getName());
        System.out.println(intArray.getClass().getSuperclass());
    }
}

[Saya
class java.lang.Object

Nama kelas "[I" ini hanyalah nama simbolik yang dijana secara automatik, yang JVM gunakan untuk mewakili tatasusunan integer (int[]). Setiap jenis mempunyai nama simboliknya sendiri:

array[]: uma classe especial gerenciada internamente pela própria JVM

Kurungan "[" menunjukkan dimensi. Tatasusunan satu dimensi diwakili oleh [, manakala tatasusunan dua dimensi diwakili oleh [[, tatasusunan tiga dimensi diwakili oleh [[[... dan seterusnya.

Pengisytiharan

Untuk mengisytiharkan dan memulakan tatasusunan, adalah penting untuk menentukan jenis data dan saiz objek:

int[] intArray = new int[5]; //array de tamanho 5
char[] charArray = new char[]{'a', 'b', 'c'}; //o compilador entende que é um array de tamanho 3
double[] doubleArray = {1.2, 1.3, 1.4, 1.5}; //o compilador entende que é um array de tamanho 4

Java membolehkan anda meletakkan kurungan segi empat sama dalam nama pembolehubah dan bukannya jenis, contohnya: int intArray[] = new int[5]. Walau bagaimanapun, ini tidak disyorkan, kerana ia menyimpang daripada konvensyen.

Data yang disimpan dalam tatasusunan boleh diperuntukkan dalam ingatan "bersambung", iaitu, secara berurutan, oleh JVM. Untuk mengakses data, indeks digunakan dan indeks pertama tatasusunan sentiasa 0 dalam Java.

Sebagai contoh, untuk mengakses huruf 'a' charArray di atas, anda perlu mencarinya dengan charArray[0]. Huruf 'b' pula, berada dalam charArray[1] dan huruf 'c', dalam charArray[2]. Jika anda cuba mengakses indeks yang tidak wujud dalam tatasusunan, anda akan menerima ralat "IndexOutOfBounce". Sebagai contoh, sekiranya saya cuba mengakses nilai dalam charArray[3].

Saiz tatasusunan, setelah ditakrifkan dalam pengisytiharan, tidak boleh diubah. Jika saya mengisytiharkan bahawa charArray akan mempunyai 3 elemen, ia tidak akan mengandungi lebih daripada itu. Kurang ya... lebih tidak.

Dan di sini, tambahan. Nilai yang tidak terisi dalam tatasusunan akan menganggap nilai lalai yang sama seperti jenis tatasusunan. Sebagai contoh, dalam tatasusunan integer, nilai kosong akan diisi dengan 0. Dalam tatasusunan boolean, dengan palsu. Dalam tatasusunan rentetan, dengan nol.

Sama seperti saiz, jenis tatasusunan tidak boleh diubah. Tetapi adalah mungkin untuk menyalin tatasusunan dengan jenis yang berbeza, jika ia adalah subjenis daripada jenis yang sama. Mengelirukan, bukan? Contoh membantu: Integer dan Double ialah subjenis Nombor. Jadi...

Integer[] integerArray = {1, 2, 3};
Number[] numberArray = intgerArray;

Kod ini diterima oleh pengkompil. Walau bagaimanapun, berhati-hati diperlukan. Jika kami melakukan ini di sini, kami akan menjana ralat kompilasi:

numberArray[0] = 1.2;

Ini kerana integerArray dan numberArray menghala ke ruang memori yang sama. Walaupun numberArray menyokong double sebagai elemen pertamanya, integerArray tidak dan, oleh itu, numberArray tidak "dibenarkan" untuk menukar nilai indeks 0.

Ingatan

Suatu tatasusunan sentiasa boleh menyimpan data jenis yang sama, menerima primitif dan objek. Jika tatasusunan dibuat daripada integer, ia tidak akan menerima char, double, float, String... hanya nilai integer.

Tatasusunan itu sendiri ialah kelas (walaupun kelas istimewa) dan, oleh itu, disimpan pada Heap. Dengan cara ini, tatasusunan menyimpan alamat memori yang, seterusnya, mengandungi nilai yang dimasukkan dalam tatasusunan.

Susun atur primitif memperuntukkan blok memori bersebelahan untuk menyimpan nilai secara langsung, manakala tatasusunan objek menyimpan rujukan (penunjuk) kepada objek, yang terletak di tempat lain dalam ingatan.

Ini bermakna kedua-dua tatasusunan jenis primitif (seperti int[]) dan tatasusunan objek (seperti String[]) disimpan pada timbunan. Dalam kes tatasusunan jenis primitif, nilai elemen tatasusunan juga disimpan terus pada timbunan, bersebelahan dengan tatasusunan itu sendiri. Dalam kes tatasusunan objek, objek yang ditunjuk oleh rujukan ini boleh diperuntukkan di lokasi yang berbeza pada timbunan.

Kaedah

Semua kelas tatasusunan mempunyai kaedah panjang dan pengklonan. Yang pertama mengembalikan saiz tatasusunan dan yang kedua membuat salinan tatasusunan kepada tatasusunan lain (dalam kes ini, penuding ke alamat memori yang sama).

Walau bagaimanapun, sebagai anak kepada kelas Object (serta semua kelas dalam Java), tatasusunan juga mempunyai kaedah superclass: toString, equals dan hashCode.

Bagaimanapun, menggunakan tatasusunan di belakang tabir adalah perkara yang paling kerap berlaku dalam kehidupan sebenar. Walaupun tatasusunan berprestasi, ia adalah lebih rumit untuk mengulang elemennya dan terdapat kelas yang membuat abstraksi di atas tatasusunan yang menjadikan kehidupan pengaturcara lebih mudah.

Ini adalah kes dengan kelas Arrays (dengan huruf besar). Ia pada asasnya membungkus tatasusunan dalam kelas Java standard dan membentangkan satu siri kaedah yang sangat mudah untuk melaksanakan untuk bekerja dengan data. Kelas Arrays mempunyai satu lagi kelebihan hebat: ia berfungsi dengan peruntukan dinamik, jadi lebih mudah untuk menangani koleksi - lagipun, kita jarang mengetahui saiz tepat tatasusunan yang mungkin kita perlukan. Kelas Tatasusunan boleh mengembangkan saiz koleksi atas permintaan, tanpa pengaturcara perlu mencipta tatasusunan baharu (dengan huruf kecil) bersaiz lebih besar dan menyalin data daripada tatasusunan sebelumnya, yang tiba-tiba menjadi terlalu kecil.

Array juga merupakan asas kelas seperti List, Stack dan Queue (yang pada asasnya adalah bungkus dan termasuk kaedah yang sangat baik untuk menangani data).

Pernahkah anda berfikir bahawa String ialah kelas yang mengabstrakkan tatasusunan aksara?

array[]: uma classe especial gerenciada internamente pela própria JVM

Atas ialah kandungan terperinci array[]: kelas khas yang diuruskan secara dalaman oleh JVM itu sendiri. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn