數組
數組的概念:是一種容器,可以同時存放多個數據值
數組的特點:
- 數組是一種引用數據類型
- 數組當中的多個數據,類型必須統一
- 數組的長度在程序運行期間不可以改變
數組的初始化:在內存當中創建一個數組,並且向其中賦予一些默認值。
兩種常見的初始化方式:
1.動態初始化(指定長度)
2.靜態初始化(指定類容)
動態初始化數組的格式: 數據類型[] 數組名稱 = new 數組類型[數組長度];
解析含義:
- 左側數據類型:也就是數組當中保存的數據,全都是統一的什么類型
- 左側的括號:代表是一個數組
- 左側數組名稱:給數組取一個名字
- 右側的new:代表創建數組的動作
- 右側的數據類型:必須和左邊的數據類型保持一致
- 右側中括的長度:也就是數組當中,到底可以保存多少個數據,是一個int數字
//動態初始化(指定長度) int[] array1 = new int[3377];
數組定義的格式-靜態初始化
動態初始化(指定長度):在創建數組的時候,直接指定數組當中的數據元素個數
靜態初始化(指定類容):在創建數組的時候,不直接指定數據個數多少,而是直接將具體的數據類容進行指定。
靜態初始化基本格式: 數據類型[] 數組名稱 = new 數據類型[]{元素1,元素2,...}
注意事項:
雖然靜態初始化沒有直接告訴長度,但是根據大括里面的元素具體內容,也可以自動推算出來長度。
//靜態初始化 String[] array2 = new String[]{"cai","niao","chuan","qi"};
使用靜態初始化數組的時候,格式還可以省略一下。
//省略格式 數據類型[] 數組名稱 = {元素1,元素2,...};
注意事項:
1.靜態初始化沒有直接指定長度,但是仍然會自動推算得到長度。
2.動態和靜態初始化可以拆分為兩步驟。
3.靜態初始化一旦使用省略模式,就不能拆分成為兩步驟了。
//拆分為兩步驟。 int[] array1; array1 = new int[7] int[] array2; array2 = new int[] {3,4,5,6,7}
數組元素的訪問
直接打印數組名稱:得到的是數組對應的,內存地址哈希值。
訪問數組元素的格式:數組名稱[索引值]
索引值:就是一個int數字,代表數組當中元素編號。
【注意】:索引值從0開始,一直到“數組的長度-1”為止。
使用動態初始化數組的時候,其中的元素將會自動擁有一個默認值。如下:
- 如果是整數類型:那么默認值為0
- 如果是浮點類型:那么默認值為0.0
- 如果是字符類型:那么默認值為\u0000
- 如果是布爾類型:那么默認值為false
- 如果是引用類型:那么默認值為null
注意事項:
靜態初始化其實也有默認值,只不過系統自動馬上將默認值替換成為了大括當中的具體數值。
Java的內存需要划分成為5個部分:
1.棧(Stack):存放的都是方法中的局部變量。方法的運行一定要在棧當中運行。
- 局部變量:方法的參數,或者是方法{}內部的變量
- 作用域:一旦超出作用域,立從棧內存當中消失。
2.堆(Heap):凡是new出來的東西,都在堆當中。
堆內存里面的東西都有一個地址值:16進制
堆內存里面的數據,都有默認值。規則:
- 如果是整數類型:那么默認值為0
- 如果是浮點類型:那么默認值為0.0
- 如果是字符類型:那么默認值為\u0000
- 如果是布爾類型:那么默認值為false
- 如果是引用類型:那么默認值為null
3.方法區(Method Area):存儲.class相關信息,包含方法的信息。
4.本地方法棧(Native Method Stack):與操作系統相關。
5.寄存器(pc Register):與cpu相關。
數組操作異常:
數組索引號越界異常
數組的索引編號從0開始,一直到“數組的長度-1”為止。
如果訪問數組元素的時候,索引號並不存在,那么將會發生
數組索引號越界異常
ArrayIndexOutOfBoundsException
原因:索引編號寫錯了。
解決:修改成為存在正確索引編號
空指針異常
所有的引用類型變量,都可以賦值為一個null值。但是代表其中什么都沒有。
數組必須進行new初始化才能使用其中的元素。
如果只是賦值了一個null,沒有進行new創建,那么將會發生
空指針異常
NullPointerException
原因:忘了new
解決:補上new
獲取數組的長度
如何獲取數組的長度,格式:
數組名稱.length
這將會得到一個int數字,代表數組的長度
數組一旦創建,程序運行期間,長度不可改變。
例子:數組的反轉 public class CaiNaio{ public static void main(String[] args){ int[] array = {10,20,30,40,50}; //遍歷打印數組本來的樣子 for(int i = 0;i<array.length;i++){ System.out.println(array[i]); } //進行反轉操作 for(int min = 0,max = array.length-1;min <max;min++,max--){ int temp = array[min]; array[min] = array[max]; array[max] = array[temp]; } //再次遍歷打印數組 for(int i = 0;i<array.length;i++){ System.out.println(array[i]); } } }
數組可以作為方法的參數
當調用方法的時候,向方法的小括進行傳參,傳遞進去的其實是數組的地址值。
一個方法可以有0、1、多個參數,但是只能有0或者1個返回值,不能有多個返回值。
如果希望一個方法當中產生了多個結果數據進行返回,怎么辦?
解決方案:使用一個數組作為返回值類型即可。
數組可以作為返回值類型
任何數據類型都能作為方法的參數類型,或者返回值類型。
- 數組作為方法的參數,傳遞進去的其實是數組的地址值。
- 數組作為方法的返回值,返回的其實也是數組的地址值。