クラス、インターフェイス、配列、文字列 |
null |
|
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 がプログラムを実行するときは、メモリ内に領域を割り当て、その領域をさまざまな領域に分割する必要があります。 スタック メモリ: ローカル変数を保存し、使用後すぐに消えます。 ヒープ メモリ: コンテンツ (オブジェクト、エンティティ) と新しい変数のアドレスを保存します。使用後、ガベージ コレクターがアイドル状態のときにリサイクルします。 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@15db974200
0
[I@15db9742
] 100
0
200
原理の説明:
動的初期化では、まず、ヒープメモリ arr アドレス値は、コンパイラの結果に応じて、ここでは 001 とします。動的初期化のため、各要素には初期値が設定されており、詳細は上表を参照してください。要素を出力するときは、まず配列名アドレスにアクセスし、ヒープ メモリの添字に移動して、要素の値を出力します。 配列値を変更するプロセスは、以下に示すように、変更プロセスにもう 1 つのステップがあることを除いて、表示する場合と同じです。 ##2. 複数の配列メモリの図
複数の配列と単一の配列メモリを使用する原理は同じです。ここでは詳細には触れません。
3. 配列は同じメモリを指します
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
100200
300[I@ 15db9742111
[I@15db9742
111
原理の説明:
##最初の配列はヒープ メモリ内にありますのアドレスは 001 で、2 番目の配列も 001 であるため、2 番目の配列の値を変更することは、実際には同じ配列メモリになります。それに応じて最初の配列の値も変更され、結果は次のようになります:
5. よくある質問1. インデックスが範囲外です//静态初始化数组
int [] array= {1,2,3};
System.out.println(array[3]);
上記のコードを実行すると、次のエラー例外が表示されます:
スレッド "main" java.lang.NullPointerException での例外 説明: 配列を null に設定したため、アクセスされた配列がヒープ メモリ内のデータを指さなくなりました