從零開始學java(陣列)
陣列
java中,陣列其實也是一個數據型別,陣列也是程式語言中比較常見的一種資料型別,用於儲存多個數據,每個陣列元素存放一個數據,通常可以通過陣列元素的索引訪問陣列元素,包括為元素賦值和取出陣列中元素的值。
簡單理解陣列
java中的陣列要求一個數組內只能儲存一種資料型別,因為java是面向物件的所以我們之前說到了面向物件的多型性,所以這裡的型別引用可以是父類,例項的子類。(即:水果類作為引用,蘋果例項,草莓例項,香蕉例項),而且java的陣列一旦初始化完成,陣列的記憶體中所佔的空間將被固定下來,因此陣列的長度是不可變的。就算把它資料清空,它所佔用的大小一樣是這麼大。
陣列可以儲存基本資料型別,也可以儲存引用資料型別。
定義陣列的語法: type[] arrayName 或者 type arrayName[] 注意:定義陣列時不能指定陣列的長度 例如: type [4] arrayName
陣列的初始化
java語言中陣列必須要初始化才可以使用,所謂的初始化,就是為陣列的所有元素都分配記憶體空間,併為每個陣列元素都賦值初始值。
陣列的初始化有兩種方式:
靜態初始化:初始化時由程式設計師顯式指定每個元素的初始值,由系統決定長度。
動態初始化:初始化時由程式設計師指定長度,系統預設初始值。
publicstatic void main(String[] args) { //靜態初始化語法: arrayName = new type[]{element1,element2,element3.....} String [] _strs = new String[]{"靜","態","初","始","化"}; //動態初始化語法: arrayName = new type[length] Object[] _strsObject = new String[5]; }
注意不要同時使用靜態初始化和動態初始化,也就是在陣列初始化時不要既指定它的長度又為每個元素分配初始值。
陣列的使用
訪問陣列元素是通過陣列引用變數後緊跟一個'[]' ,方括號中是陣列中的陣列元素的索引。java語言中的索引是從0開始的,也就是說,索引的開始是0 結束是長度-1。
//我們定義一個長度為5的String型別的陣列 String [] _strs = new String[]{"str_1","str_2","str_3","str_4","str_5"}; System.out.println(_strs[1]);//列印結果為 str_2 _strs[1] = "我被改變了"; System.out.println(_strs[1]);//列印結果為 我被改變了 //配合for迴圈使用陣列 for(int i =0 ;i<_strs.length;i++){ System.out.println(_strs[i]); } //迴圈遍歷了陣列中的所有元素按照順序列印了一遍 同樣賦值也可以這麼做
深入陣列
這裡說下堆記憶體(heap)與棧記憶體(stack)
當一個方法執行時,每個方法都會建立自己的記憶體棧,在這個方法內定義的變數將會逐個被放入這塊棧記憶體中,伴隨方法的結束, 這個方法的記憶體棧也將被自 然銷燬。因此呢,所以在方法中的定義的區域性變數都是放在棧記憶體的;在程式中建立一個物件的時候,這個物件將被儲存到執行時資料區中,以便於重複利用 (因為物件的建立成本通常較大說到這就能理解懶載入的重要性),這個執行時資料區就是堆記憶體。堆記憶體的物件不會隨著方法的結束而銷燬,即使方法結束後, 這個物件還可能被另外一個引用變數所引用(在方法的引數傳遞時很常見),則這個物件依然不會被銷燬。只有當一個物件沒有任何引用變數引用它時,系統的 垃圾回收器才會在合適的時候回收它。