Rumah >Java >javaTutorial >Mata pengetahuan tatasusunan Java (perkongsian ringkasan)
Artikel ini membawakan anda pengetahuan yang berkaitan tentang java Ia terutamanya memperkenalkan isu yang berkaitan dengan tatasusunan, termasuk definisi tatasusunan, atribut tatasusunan, peta memori dan beberapa masalah biasa di bawah ini saya harap ia dapat membantu semua.
Pembelajaran yang disyorkan: "tutorial video java"
- Jika gred rakan sekelas perlu disimpan, apakah kaedah yang perlu digunakan?
- Seperti yang kita pelajari sebelum ini, berbilang pembolehubah boleh ditakrifkan untuk menyimpan markah yang berbeza. Tetapi jika terdapat lebih daripada 1,000 pelajar, bagaimana pula dengan menentukan lebih daripada 1,000 pembolehubah? Sudah tentu tidak, ini memerlukan penggunaan tatasusunan kami.
Ciri: Apabila mentakrifkan tatasusunan Tetapkan nilai secara langsung kepada tatasusunan dan panjang tatasusunan ditentukan oleh sistem
Format umum:
数据类型[] 数组名 = { 元素1,元素2 ,元素3,… }; 例如: int [] array= {1,2,3,4,5}; double[] scores = {88.5, 99.5, 59.5};
Ciri: Apabila mentakrifkan tatasusunan, tentukan jenis daripada elemen dan panjang, kemudian simpan data
Format umum:
数据类型[] 数组名 = new 数据类型[长度]; 例如: int [] array= new int[5]; double[] scores = new double[3];
Nilai lalai:
Jenis data td> | Jenis definisi khusus | Nilai lalai | |||||||||||||
Jenis asas |
|
0 | |||||||||||||
terapung, dua kali ganda | 0.0 | ||||||||||||||
boolean | false | ||||||||||||||
Jenis rujukan | Kelas, antara muka , tatasusunan, Rentetan | null |
- 数组适合同种类型的大量数据
- 静态初始化适合知道了元素值
- 动态初始化适合不清楚存入哪些数据
- 一般访问数组的方式为:
数组名称[索引]
例题:
//静态初始化数组 int [] array= {1,2,3,4,5}; System.out.println(array[0]);//输出 1 System.out.println(array[1]);//输出 2 System.out.println(array[3]);//输出 4
- 长度可以直接调用length得到数组的长度。
例题:
//静态初始化数组 int [] array= {1,2,3,4,5}; System.out.println(array.length);//调用方法,输出长度 5 //最大索引array.length-1
- 遍历就是一个一个数组元素的访问,主要应用在搜索、数据统计......
- 我们之前学了第7天:循环结构、第6天:分支结构,下面通过for循环遍历一个数组
例题:
- 给定元素 {10,8,9,4,5,6,8,71,2,3,9,99},用静态数组存储并输出数组中大于5的元素?
编码实现:
//静态初始化数组 int [] array= {10,8,9,4,5,6,8,71,2,3,9,99}; for(int i=0;i<array.length;i++) { if(array[i]>5) System.out.println(array[i]); }
输出结果:
10 8 9 6 8 71 9 99
- Java在程序运行时,需要在内存中分配空间,对空间进行了不同区域的划分。
- 栈内存:存储局部变量,使用完毕立即消失
- 堆内存:存储new 出来的内容(对象、实体),地址使用完毕在垃圾回收器空闲时回收
- 下面的创建数组代码,实现它的内存关系图
编码实现:
//动态初始化数组 int [] arr=new int[3]; System.out.println(arr); System.out.println(arr[0]); System.out.println(arr[1]); System.out.println(arr[2]); //修改值 arr[0]=100; arr[2]=200; System.out.println(arr); System.out.println(arr[0]); System.out.println(arr[1]); System.out.println(arr[2]);
输出结果:
[I@15db9742 0 0 0 [I@15db9742 100 0 200
原理讲解:
- 动态初始化先在堆内存生成一个new 一个arr 地址值,具体看编译器的结果,这里假设001。由于动态初始化,所以每个元素都有一个初始值,具体可以看上面的表。我们输出元素,先访问数组名地址,到堆内存下标,再输出元素值。
- 修改数组值,历程和查看相同,只不过多了一步修改的过程,如下图:
- 多个数组和单数组内存使用原理相同,这里我就不过多讲述了。
- 假如我们把两个数组的地址值改为相同,修改后的结果该是如何,如下面的代码。
编码实现:
//动态初始化数组 int [] arr=new int[3]; arr[0]=100; arr[1]=200; arr[2]=300; System.out.println(arr); System.out.println(arr[0]); System.out.println(arr[1]); System.out.println(arr[2]); int [] arr2=arr; arr2[0]=111; arr2[1]=222; arr2[2]=333; System.out.println(arr); System.out.println(arr[0]); System.out.println(arr2); System.out.println(arr2[0]);
输出结果:
[I@15db9742 100 200 300 [I@15db9742 111 [I@15db9742 111
原理讲解:
- 第一个数组在堆内存的地址为001,第二个数组也为001,所以修改第二个数组的值,其实都是同一个数组内存。第一个数组的值也会随着改变,结果如下:
//静态初始化数组 int [] array= {1,2,3}; System.out.println(array[3]);
- 上面的代码运行之后,会出现下面的报错异常:
- Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
- 解释:我们静态化初始数组给了3个数字,最大索引为2,当我们访问3时,就会报错
//动态初始化数组 int [] array= new int[3]; array=null; System.out.println(array[0]);
- 上面的代码运行之后,会出现下面的报错异常:
- Exception in thread "main" java.lang.NullPointerException
- 解释:我们将数组置为null,导致访问的数组不指向堆内存的数据
推荐学习:《java视频教程》
Atas ialah kandungan terperinci Mata pengetahuan tatasusunan Java (perkongsian ringkasan). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!