一、數組
1、容器概述
容器:是將多個數據存儲到一起,每個數據稱為該容器的元素。
2、數組概述
數組:數組就是存儲數據長度固定的容器,保證多個數據的數據類型要一致。
數組特點:
(1)數組是一種引用數據類型;
(2)數組當中的多個數據,類型必須統一;
(3)數組的長度在程序運行期間不可改變;
3、數組的定義
(1)創建數組
a、先聲明,再用 new 運算符進行內存分配
兩種聲明方式:
數組元素類型 數組名稱[];
數組元素類型[] 數組名字;
-
-
- 數組元素類型:決定了數組的數據類型,即數組要存放什么類型的數據,可以是基本數據類型和引用數據類型;
- 數組名稱:合法的標識符即可;
- []:指明該變量是一個數組類型的變量;
-
使用 new 運算符為數組分配內存空間。
數組名字 = new 數組元素的類型[數組元素的個數]
-
-
- 數組名字:被連接到數組變量的名稱;
- 數組元素的個數:指定數組中變量的個數,即數組的長度;
-
注意:使用 new 關鍵字分配數組時,必須指定數組元素的類型和數組元素的個數。
b、聲明的同時為數組分配內存
語法格式:
數組元素的類型[] 數組名 = new 數組元素的類型[數組元素的個數];
(2)初始化數組
數組的初始化:在內存當中創建一個數組,並且向其中賦予一些默認值。
兩種常見的初始化方式:
動態初始化(指定長度)
靜態初始化(指定內容)
a、動態初始化數組的格式
數據類型[] 數組名稱 = new 數據類型[數組長度];
-
-
- 數據類型:也就是數組當中保存的數據,全都是統一的什么類型;
- 中括號:代表是一個數組;
- 數組名稱:給數組取一個名字,合法的標識符即可;
- new:代表創建數組的動作;
- 數據類型:必須和左邊的數據類型保持一致;
- 中括號的長度:也就是數組當中,到底可以保存多少個數據,是一個int數字
-
注意:數組有定長特性,長度一旦指定,不可更改。
b、靜態初始化基本格式
數據類型[] 數組名稱 = new 數據類型[] { 元素1, 元素2, ... };
注意:雖然靜態初始化沒有直接告訴長度,但是根據大括號里面的元素具體內容,也可以自動推算出來長度。
c、靜態初始化省略格式
數據類型[] 數組名稱 = { 元素1, 元素2, ... };
4、數組的訪問
(1)打印數組名稱
打印數組的名稱,得到的是數組對應的:數組對象的類型@內存地址哈希值。(十六進制的地址值)
(2)數組的長度
每個數組都具有長度,而且是固定的,Java中賦予了數組的一個屬性,可以獲取到數組的 長度,語句為: 數組名.length ,屬性length的執行結果是數組的長度,int類型結果。
由次可以推斷出,數組 的最大索引值為 數組名.length-1 。
(3)訪問數組中的元素
索引:每一個存儲到數組的元素,都會自動的擁有一個編號,從0開始,這個自動編號稱為數組索引 (index),可以通過數組的索引訪問到數組中的元素。
格式:
數組名[索引]
索引訪問數組中的元素:
數組名[索引] = 數值, //為數組中的元素賦值
變量 = 數組名[索引] //獲取出數組中的元素
(4)數組中的默認值
使用動態初始化數組的時候,其中的元素將會自動擁有一個默認值。規則如下:
-
-
- 如果是整數類型,那么默認為 0;
- 如果是浮點類型,那么默認為 0.0;
- 如果是字符類型,那么默認為 '\u0000',字符編碼為0的空字符;
- 如果是布爾類型,那么默認為 false;
- 如果是引用類型,那么默認為 null。
- 如果是整數類型,那么默認為 0;
-
注意:靜態初始化其實也有默認值的過程,只不過系統自動馬上將默認值替換成為了大括號當中的具體數值。
二、數組原理內存圖
1、內存概述
內存是計算機中的重要原件,臨時存儲區域,作用是運行程序。我們編寫的程序是存放在硬盤中的,在硬盤中的程 序是不會運行的,必須放進內存中才能運行,運行完畢后會清空內存。
Java虛擬機要運行程序,必須要對內存進行空間的分配和管理
2、Java 虛擬機的內存划分
為了提高運算效率,就對空間進行了不同區域的划分,因為每一片區域都有特定的處理數據方式和內存管理方式。
JVM 的內存划分
3、數組在內存中的存儲
(1) 一個數組與內存關系
程序執行流程:
a、main 方法進入方法棧執行;
b、創建數組,JVM會在堆內存中開辟空間,存儲數組;
c、數組在內存中會有自己的內存地址,以十六進制數表示;
d、數組中有3個元素,默認值為 0
e、JVM 將數組的內存地址賦值給引用變量 array;
f、變量 array 保存的是數組內存中的地址,而不是一個具體是數值,因此稱為 引用數據類型
(2)兩個數組與內存關系
(3)兩個變量指向一個數組