Heim  >  Artikel  >  Java  >  Java-Array-Wissenspunkte (Zusammenfassungsfreigabe)

Java-Array-Wissenspunkte (Zusammenfassungsfreigabe)

WBOY
WBOYnach vorne
2022-05-06 11:59:212086Durchsuche

Dieser Artikel vermittelt Ihnen relevantes Wissen über Java. Er stellt hauptsächlich Probleme im Zusammenhang mit Arrays vor, einschließlich der Definition von Arrays, Attributen von Arrays, Speicherzuordnungen und einigen häufigen Problemen alle.

Java-Array-Wissenspunkte (Zusammenfassungsfreigabe)

Empfohlenes Lernen: „Java-Video-Tutorial

Definition von Arrays

1. Übersicht

  • Welche Methode sollte verwendet werden, wenn die Noten eines Mitschülers gespeichert werden müssen?
  • Wie wir bereits erfahren haben, können mehrere Variablen definiert werden, um unterschiedliche Bewertungen zu speichern. Aber wenn es mehr als 1.000 Studierende gibt, wie wäre es dann mit der Definition von mehr als 1.000 Variablen? Natürlich nicht, dies erfordert die Verwendung unseres Arrays.

2. Statische Initialisierung des Arrays

  • Funktionen: Weisen Sie dem Array beim Definieren direkt Werte zu, und das System bestimmt die Array-Länge

    数据类型[] 数组名 = { 元素1,元素2 ,元素3,… };
    例如:
    int [] array= {1,2,3,4,5};
    double[] scores = {88.5, 99.5, 59.5};
3. Dynamische Initialisierung des Arrays

Funktionen: Bestimmen Sie beim Definieren eines Arrays den

Typ
des Elements und die
    Länge
  • des Arrays und speichern Sie dann die Daten

    Allgemeines Format:

    数据类型[] 数组名 = new 数据类型[长度];
    例如:
    int [] array= new int[5];
    double[] scores = new double[3];
Standardwert: 类 Datentyp 体 Spezifische Definitionstypen

Grundtypen

Grundtypen

Byte, SHORT, CHAR, INT, Long0 0.0falsenull

4.总结

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

数组的属性

1.访问

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

例题:

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

2.长度

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

 例题:

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

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]);
}

输出结果

10 8 9 6 8 71 9 99

内存图

  •  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]);

输出结果

[I@15db9742
0
0
0
[I@15db9742
100
0
200

原理讲解:

  • 动态初始化先在堆内存生成一个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]);

输出结果

[I@15db9742
100
200
300
[I@15db9742
111
[I@15db9742
111

原理讲解:

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

常见问题

1.索引越界

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

2.空指针异常

//动态初始化数组
int [] array= new int[3];
array=null;
System.out.println(array[0]);
  • 上面的代码运行之后,会出现下面的报错异常:
  • Exception in thread "main" java.lang.NullPointerException
  • 解释:我们将数组置为null,导致访问的数组不指向堆内存的数据

推荐学习:《java视频教程

float, Double

boolean

Referenztyp

Class, Interface, Array, String

Das obige ist der detaillierte Inhalt vonJava-Array-Wissenspunkte (Zusammenfassungsfreigabe). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen