Rumah > Java > javaTutorial > Mata pengetahuan tatasusunan Java (perkongsian ringkasan)

Mata pengetahuan tatasusunan Java (perkongsian ringkasan)

WBOY
Lepaskan: 2022-05-10 12:09:57
ke hadapan
2158 orang telah melayarinya

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.

Mata pengetahuan tatasusunan Java (perkongsian ringkasan)

Pembelajaran yang disyorkan: "tutorial video java"

Definisi tatasusunan

1

  • 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.

2. Tatasusunan permulaan statik

  • 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};
Salin selepas log masuk

3. Tatasusunan permulaan dinamik

  • 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];
Salin selepas log masuk

Nilai lalai:

Jenis data td> Jenis definisi khusus Nilai lalai
Jenis asas
数据类型 具体定义类型 默认值
基本类型

byte、short、char、int、long

0

float、double

0.0

boolean

false
引用类型

类、接口、数组、String

null
bait, pendek, aksara, int, panjang
0
terapung, dua kali ganda 0.0
boolean false
Jenis rujukan Kelas, antara muka , tatasusunan, Rentetan null

4.总结

  • 数组适合同种类型大量数据
  • 静态初始化适合知道了元素值
  • 动态初始化适合不清楚存入哪些数据

数组的属性

1.访问

  • 一般访问数组的方式为:
数组名称[索引]
Salin selepas log masuk

例题:

//静态初始化数组
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
Salin selepas log masuk

2.长度

  • 长度可以直接调用length得到数组的长度。

 例题:

//静态初始化数组
int [] array= {1,2,3,4,5};
System.out.println(array.length);//调用方法,输出长度 5
//最大索引array.length-1
Salin selepas log masuk

3.遍历

  • 遍历就是一个一个数组元素的访问,主要应用在搜索数据统计......
  • 我们之前学了第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]);
}
Salin selepas log masuk

输出结果

10 8 9 6 8 71 9 99
Salin selepas log masuk

内存图

  •  Java在程序运行时,需要在内存中分配空间,对空间进行了不同区域的划分。
  • 栈内存:存储局部变量,使用完毕立即消失
  • 堆内存:存储new 出来的内容(对象、实体),地址使用完毕在垃圾回收器空闲时回收

1.单数组内存图

  • 下面的创建数组代码,实现它的内存关系图

 编码实现: 

//动态初始化数组
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]);
Salin selepas log masuk

输出结果

[I@15db9742
0
0
0
[I@15db9742
100
0
200
Salin selepas log masuk

原理讲解:

  • 动态初始化先在堆内存生成一个new 一个arr 地址值,具体看编译器的结果,这里假设001。由于动态初始化,所以每个元素都有一个初始值,具体可以看上面的表。我们输出元素,先访问数组名地址,到堆内存下标,再输出元素值。
  • 修改数组值,历程和查看相同,只不过多了一步修改的过程,如下图:

2.多数组内存图

  • 多个数组和单数组内存使用原理相同,这里我就不过多讲述了。 

3.数组指向相同内存

  • 假如我们把两个数组的地址值改为相同,修改后的结果该是如何,如下面的代码。

 编码实现: 

//动态初始化数组
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]);
Salin selepas log masuk

输出结果

[I@15db9742
100
200
300
[I@15db9742
111
[I@15db9742
111
Salin selepas log masuk

原理讲解:

  •  第一个数组在堆内存的地址为001,第二个数组也为001,所以修改第二个数组的值,其实都是同一个数组内存。第一个数组的值也会随着改变,结果如下:

常见问题

1.索引越界

//静态初始化数组
int [] array= {1,2,3};
System.out.println(array[3]);
Salin selepas log masuk
  • 上面的代码运行之后,会出现下面的报错异常:
  • Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
  • 解释:我们静态化初始数组给了3个数字,最大索引为2,当我们访问3时,就会报错

2.空指针异常

//动态初始化数组
int [] array= new int[3];
array=null;
System.out.println(array[0]);
Salin selepas log masuk
  • 上面的代码运行之后,会出现下面的报错异常:
  • 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!

Label berkaitan:
sumber:csdn.net
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan