ホームページ >Java >&#&チュートリアル >Java配列の使用方法の分析例

Java配列の使用方法の分析例

王林
王林転載
2023-05-10 17:19:061322ブラウズ

1. まえがき

学習の概要: 最初の 8 日間では、文法、演算子と式、ループ構造、分岐構造の基礎を学び、今日は主に配列の定義とそれに関連するものを学びます。属性メソッド、配列ストレージ メモリ図、よくある間違い

学習目標: 配列の 2 つの定義方法、関連するプロパティをマスターし、メモリの原理を理解し、エラー解決を理解する

2. 配列の定義

1 .概要

##クラスメートの成績を保存する必要がある場合、どのような方法を使用する必要がありますか?

前に学んだように、複数の変数を定義してさまざまな成績を保存できます。しかし、学生が 1,000 人以上いる場合、1,000 個を超える変数を定義するのはどうでしょうか?もちろんそうではありません。これには配列を使用する必要があります。

2. 配列の静的初期化

特徴: 配列定義時に値を直接代入し、システムが配列の長さを決定します

一般的な形式:

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

例:
int [] array= {1,2,3, 4,5};
double[] スコア = {88.5, 99.5, 59.5};

3. 配列を動的に初期化する

機能: 要素の型を決定する配列を定義するときの配列の長さ、およびデータの保存

一般形式:

データ型[]配列名=新しいデータ型[長さ];

例:
int [] array= new int [5];
double[] スコア = new double[3];

デフォルト値:

データ型特定の定義型デフォルト値基本型##byte 、short、char、int、longfloat、doubleブール値 参照型

4. 概要

  • 配列は同じ型の大量のデータに適しています

  • 静的初期化は要素を知るのに適しています値

  • 動的初期化は、保存される不明確なデータに適しています

##3. 配列属性

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. トラバーサル

トラバーサルは配列要素に 1 つずつアクセスし、主に検索やデータ統計に使用されます...

ループ構造と分岐構造については前に学習しました。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

IV. メモリマップ

Java配列の使用方法の分析例

    #Java がプログラムを実行するときは、メモリ内に領域を割り当て、その領域をさまざまな領域に分割する必要があります。
  • スタック メモリ: ローカル変数を保存し、使用後すぐに消えます。
  • ヒープ メモリ: コンテンツ (オブジェクト、エンティティ) と新しい変数のアドレスを保存します。使用後、ガベージ コレクターがアイドル状態のときにリサイクルします。
  • 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

原理の説明:

Java配列の使用方法の分析例

    動的初期化では、まず、ヒープメモリ arr アドレス値は、コンパイラの結果に応じて、ここでは 001 とします。動的初期化のため、各要素には初期値が設定されており、詳細は上表を参照してください。要素を出力するときは、まず配列名アドレスにアクセスし、ヒープ メモリの添字に移動して、要素の値を出力します。
  • 配列値を変更するプロセスは、以下に示すように、変更プロセスにもう 1 つのステップがあることを除いて、表示する場合と同じです。
  • ##2. 複数の配列メモリの図

Java配列の使用方法の分析例

複数の配列と単一の配列メモリを使用する原理は同じです。ここでは詳細には触れません。

3. 配列は同じメモリを指しますJava配列の使用方法の分析例

2 つの配列のアドレス値を同じになるように変更すると、変更された結果は次のようになります。次のコード。

エンコード実装:

//动态初始化数组
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 で、2 番目の配列も 001 であるため、2 番目の配列の値を変更することは、実際には同じ配列メモリになります。それに応じて最初の配列の値も変更され、結果は次のようになります:

Java配列の使用方法の分析例

5. よくある質問

1. インデックスが範囲外です

//静态初始化数组
int [] array= {1,2,3};
System.out.println(array[3]);
Java配列の使用方法の分析例

上記のコードを実行すると、次のエラー例外が表示されます:

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException : 3
  • 説明: 配列を静的に初期化し、3 つの数値を与えました。最大インデックスは 2 です。3 にアクセスすると、エラーが報告されます。
  • 2. Null ポインター例外
  • //动态初始化数组
    int [] array= new int[3];
    array=null;
    System.out.println(array[0]);

  • 上記のコードを実行すると、次のエラー例外が表示されます:

    スレッド "main" java.lang.NullPointerException での例外
  • 説明: 配列を null に設定したため、アクセスされた配列がヒープ メモリ内のデータを指さなくなりました

0

0.0

#false

クラス、インターフェイス、配列、文字列

null

以上がJava配列の使用方法の分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。