JAVA Foundation-Chapter 5 Array

今日の内容

配列の概念
配列定義
配列インデックス
配列メモリ
配列トラバーサル
配列の最大値の取得
配列反転
配列をメソッドパラメータおよび戻り値として

教育目的

コンテナーの概念
理解し、
配列の最初の定義をマスターし、配列の2番目の定義
をマスターし、配列の3番目の定義をマスターし、
インデックスを使用して配列要素にアクセスし、配列
のメモリダイアグラムを
理解し、nullポインターと範囲外の例外を理解し
配列の走査
マスターします
配列の最大値を取得する配列の反転の原理を
理解する配列がメソッドパラメータとして渡される方法を
理解するメソッドの戻り値として配列を理解する

第1章アレイの定義とアクセス

1. 1コンテナの概要

ケース分析

ここで、平均給与の計算、最​​高給与の検索など、会社の従業員の給与をカウントする必要があります。会社に50人の従業員がいる場合、前に学習した知識を使用して、プログラムはまず50人の変数を宣言して各従業員の給与を記憶してから操作を実行する必要があります。これは非常に面倒で、エラー率は非常に高くなります。高い。そのため、コンテナを操作に使用できます。すべてのデータを1つのコンテナーに格納し、均一に操作します。

コンテナコンセプト

コンテナ:複数のデータを一緒に保存します。各データはコンテナの要素と呼ばれます。
生活のコンテナ:グラス、ワードローブ、教室

1. 2アレイの概念

配列の概念:配列は、固定長のデータを格納するためのコンテナーであり、複数のデータのデータ型が一貫している必要があります。

1. 3配列定義

方法1

フォーマット:

配列定義形式の詳細な説明:

配列ストレージのデータ型:作成された配列コンテナーに格納できるデータ型。

[]:配列を表します。

配列名:定義された配列に変数名を付けます。これは、識別子の仕様を満たし、その名前を使用して配列を操作できます。

new:关键字,创建数组使用的关键字。
数组存储的数据类型: 创建的数组容器可以存储什么数据类型。
[长度]:数组的长度,表示数组容器中可以存储多少个元素。
注意:数组有定长特性,长度一旦指定,不可更改。
和水杯道理相同,买了一个 2 升的水杯,总容量就是 2 升,不能多也不能少。
举例:

3つの整数を格納できる配列コンテナを定義します。コードは次のとおりです。

方法2

フォーマット:

例えば:

1、2、3、4、および5の整数を格納する配列コンテナーを定義します。

方法3

フォーマット:

数组存储的数据类型[] 数组名字 = new 数组存储的数据类型[长度];
int[] arr = new int[ 3 ];
数据类型[] 数组名 = new 数据类型[]{元素 1 ,元素 2 ,元素 3 ...};
int[] arr = new int[]{ 1 , 2 , 3 , 4 , 5 };

例えば:

1、2、3、4、5の整数を格納する配列コンテナを定義します

1. 4アレイアクセス

インデックス:配列に格納されているすべての要素には、0から始まる番号が自動的に付けられます。この自動番号は配列インデックスと呼ばれます

(index),可以通过数组的索引访问到数组中的元素。
格式:
数组的长度属性: 每个数组都具有长度,而且是固定的,Java中赋予了数组的一个属性,可以获取到数组的
长度,语句为:数组名.length ,属性length的执行结果是数组的长度,int类型结果。由次可以推断出,数
组的最大索引值为数组名.length- 1 。

配列の要素にアクセスするためのインデックス:

配列名[インデックス] =値、
配列の要素に値を割り当てます変数=配列名[インデックス]、配列の要素を取得します

第2章配列原理のメモリ図

2. 1メモリの概要

データ型[]配列名= {要素1、要素2、要素3…};

int[] arr = { 1 , 2 , 3 , 4 , 5 };
```数组名[索引]

public static void main(String [] args){ int [] arr = new int [] {1、2、3、4、5}; //配列の属性を出力すると、出力結果は5 System.out.println(arr .length); }



public static void main(String [] args){ //ストレージのint型配列を定義し、要素1、2、3、4、5を割り当てるint [] arr = {1、2、3、4、5}; // is 0インデックス要素が6に割り当てられていますarr [0] = 6; //配列0のインデックスで要素を取得しますint i = arr [0]; System.out.println(i); //配列0インデックス要素を直接出力しますSystem.out .println(arr [0]); }










### 内存是计算机中的重要原件,临时存储区域,作用是运行程序。我们编写的程序是存放在硬盘中的,在硬盘中的程

### 序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存。

Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。

## 2. 2 Java虚拟机的内存划分

### 为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

### 区域名称 作用

### 寄存器 给CPU使用,和我们开发无关。

### 本地方法栈 JVM在使用操作系统功能的时候使用,和我们开发无关。

メソッド領域には、実行可能なクラスファイルが格納されます。

ヒープメモリはオブジェクトまたは配列を格納し、newによって作成されたものはすべてヒープメモリに格納されます。

メソッドスタックメソッドの実行中に使用されるメモリ(メインメソッドの実行など)は、実行のためにメソッドスタックに入ります。

### JVM的内存划分:

## 2. 3 数组在内存中的存储

## 一个数组内存图

以上方法执行,输出的结果是[I@ 5 f 150435 ,这个是什么呢?是数组在内存中的地址。new出来的内容,都是在堆
内存中存储的,而方法中的变量arr保存的是数组的地址。

输出arr[ 0 ],就会输出arr保存的内存地址中数组中 0 索引上的元素

public static void main(String [] args){ int [] arr = new int [3]; System.out.println(arr); // [I @ 5 f 150435 }



## 两个数组内存图

public static void main(String [] args){ int [] arr = new int [3]; int [] arr 2 =新しいint [2]; System.out.println(arr); System.out.println(arr 2); }





## 两个变量指向一个数组

# 第三章 数组的常见操作

## 3. 1 数组越界异常

### 观察一下代码,运行后会出现什么结果。

public static void main(String [] args){ //配列を定義して3つの要素を格納するint [] arr = new int [3]; //配列インデックスを割り当てるarr [0] = 5; arr [1] = 6 ; arr [2] = 7; // 3つのインデックスで要素の値を出力しますSystem.out.println(arr [0]); System.out.println(arr [1]); System.out.println(arr [ 2]); //配列変数arr 2を定義し、arrのアドレスをarr 2に割り当てますint [] arr 2 = arr; arr 2 [1] = 9; System.out.println(arr [1]); }















### 创建数组,赋值 3 个元素,数组的索引就是 0 , 1 , 2 ,没有 3 索引,因此我们不能访问数组中不存在的索引,程序运

行后,将会抛出 ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越界异常是不能出现的,一
旦出现了,就必须要修改我们编写的代码。

## 3. 2 数组空指针异常

### 观察一下代码,运行后会出现什么结果。

arr = null这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时候
会抛出NullPointerException 空指针异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修
改我们编写的代码。

### 空指针异常在内存图中的表现

public static void main(String [] args){ int [] arr = {1、2、3}; System.out.println(arr [3]); }


public static void main(String [] args){ int [] arr = {1、2、3}; arr = null; System.out.println(arr [0]);




## 3. 3 数组遍历【重点】

### 数组遍历: 就是将数组中的每个元素分别获取出来,就是遍历。遍历也是数组操作中的基石。

### 以上代码是可以将数组中每个元素全部遍历出来,但是如果数组元素非常多,这种写法肯定不行,因此我们需要改

造成循环的写法。数组的索引是 0 到lenght- 1 ,可以作为循环的条件出现。

## 3. 4 数组获取最大值元素

public static void main(String [] args){ int [] arr = {1、2、3、4、5}; System.out.println(arr [0]); System.out.println(arr [1]); System.out.println(arr [2]); System.out.println(arr [3]); System.out.println(arr [4]); }






public static void main(String [] args){ int [] arr = {1、2、3、4、5}; for(int i = 0; i <arr.length; i ++){ System.out.println(arr [i]); } }





### 最大值获取:从数组的所有元素中找出最大值。

### 实现思路:

### 定义变量,保存数组 0 索引上的元素

### 遍历数组,获取出数组中的每个元素

### 将遍历到的元素和保存数组 0 索引上值的变量进行比较

### 如果数组元素的值大于了变量的值,变量记录住新的值

### 数组循环遍历结束,变量保存的就是数组中的最大值

## 3. 5 数组反转

public static void main(String [] args){ int [] arr = {5、15、2000、10000、100、4000}; //変数を定義し、0インデックスの要素を配列に保存しますint max = arr [0]; //配列をトラバースし、(int i = 0; i <arr.length; i ++){ //トラバースした要素を変数maxと比較します//配列要素がmaxより大きい場合if(arr [i]> max ){ // maxは最大値を記録しますmax = arr [i]; } } System.out.println( "配列の最大値は:" + max); }














### 数组的反转: 数组中的元素颠倒顺序,例如原始数组为 1 , 2 , 3 , 4 , 5 ,反转后的数组为 5 , 4 , 3 , 2 , 1

### 实现思想:数组最远端的元素互换位置。

### 实现反转,就需要将数组最远端元素位置交换

### 定义两个变量,保存数组的最小索引和最大索引

### 两个索引上的元素交换位置

### 最小索引++,最大索引--,再次交换位置

### 最小索引超过了最大索引,数组反转操作结束

# 第四章 数组作为方法参数和返回值

## 4. 1 数组作为方法参数

### 以前的方法中我们学习了方法的参数和返回值,但是使用的都是基本数据类型。那么作为引用类型的数组能否作为

### 方法的参数进行传递呢,当然是可以的。

### 数组作为方法参数传递,传递的参数是数组内存的地址。

public static void main(String [] args){ int [] arr = { 1、2、3、4、5 }; / * ループで定義された変数min = 0最小インデックスmax = arr.length-1最大インデックスmin ++、 max- * / for(int min = 0、max = arr.length -1; min <= max; min ++、max-){ //サードパーティ変数を使用して配列内の要素の交換を完了するint temp = arr [min ]; arr [min] = arr [max]; arr [max] = temp; } //反転後、配列を(int i = 0; i <arr.length; i ++){ System.out.println( arr [i]); } }

















## 4. 2 数组作为方法返回值

### 数组作为方法的返回值,返回的是数组的内存地址

public static void main(String [] args){ int [] arr = { 1、3、5、7、9 }; //メソッドを呼び出し、配列を渡すprintArray(arr); } / * メソッドを作成し、メソッドが配列タイプを受け取る配列をトラバースするパラメーター* / public static void printArray(int [] arr){ for(int i = 0; i <arr.length; i ++){ System.out.println(arr [i]); } }












public static void main(String [] args){ //メソッドを呼び出して配列の戻り値受け取る//配列のメモリアドレスを受け取るint [] arr = getArray(); for(int i = 0; i <arr .length; i ++){ System.out.println(arr [i]); } } / * Createメソッド、戻り値は配列型









## 4. 3 方法的参数类型区别

## 代码分析

### 1. 分析下列程序代码,计算输出结果。

### 创建方法,返回值是数组类型

returnは配列のアドレスを返します
* /
public static int [] getArray(){ int [] arr = { 1、3、5、7、9 }; //配列のアドレスを返し、呼び出し元に戻りますreturn arr; }



public static void main(String [] args){ int a = 1; int b = 2; System.out.println(a); System.out.println(b); change(a、b); System.out.println(a); System.out.println(b); }








### 2. 分析下列程序代码,计算输出结果。

### 总结:

### 方法的参数为基本类型时,传递的是数据值. 方法的参数为引用类型时,传递的是地址值.

public static void change(int a、int b){ a = a + b; b = b + a; }


public static void main(String [] args){ int [] arr = {1、3、5}; System.out.println(arr [0]); change(arr); System.out.println(arr [0]); }




public static void change(int [] arr){ arr [0] = 200; }

おすすめ

転載: blog.csdn.net/weixin_43419256/article/details/108198318