Java基礎之數組的初始化過程
Java基礎總結
一、數組初始化
1、數組初始化概念
Java是靜態(tài)語言,因此Java的數組也是靜態(tài)的。就是說數組在被初始化后數組的長度是不可改變的。而Java的數組初始化就是給數組對象分配內存空間并且給每個數組元素給予初始值。
數組的幾種初始化方式:
靜態(tài)初始化:程序員決定數組元素的初始值,系統(tǒng)決定長度。
String[] names = new String[]{"張三","李四","王五"}; String[] books = {"射雕英雄傳","天龍八部","笑傲江湖"};
動態(tài)初始化:程序員只決定數組元素的長度,系統(tǒng)分配元素初始值(通常為null,0等)。
String[] strAll = new String[5];
數組對象的長度初始化后長度就不可改變了,他們在堆內存中已經開辟了對應大小的內存空間。
數組變量是一個引用類型的變量,數組變量在棧內存中指向存放在堆內存中的數組對象。內存分配如下圖所示:
2、基本類型數組和引用類型的數組初始化的不同
2.1、基本類型數組初始化
對于基本類型的數組,他們的初始化就是在堆內存中開辟一個固定長度和大小的空間用于存儲基本類型數據。
比如int(初始值為0),float(初始值為0.0),char(初始值為‘\u0000’),boolean(初始值為false)等。
對應數組類型只能存儲對應的數據,并且可以替換,但唯一不變的是數組的長度大小不會變。
我們看看下面這個方法
public static void main(String[] args){ //動態(tài)初始化int數組nums,長度為5 int[] nums = [5]; //給nums數組設置元素 for(i=0;i<5;i++){ nums[i]=i; } }
根據這段代碼,我們可以得出它在內存中的變化是怎么樣,看下圖:
從這個圖可以看出,基本類型的數組元素都是存在數組開辟的內存空間中,并且長度不變,元素可以替換。相當于一個瓶子里可以裝可樂也可以裝雪碧,只要你是液體的就行,瓶子只有那么大只能裝那么多。
2.1、引用類型數組初始化
引用類型的數組,它初始化完成后數組長度也是固定的,和基本類型數組不同的地方就是數組對象元素。
基本類型數組元素是存放對應基本類型的元素具體值,而引用類型數組對象元素存放的是引用,這個引用指向堆內存中另一塊內存空間。
看例子:
public class Cat{ //體重 public double weight; //年齡 public int age; } public class Test{ public static void main(String[] args){ //定義一個數組變量cats,類型是Cat{} Cat[] cats; //執(zhí)行動態(tài)初始化數組,長度為2 cats = new Cat[2]; //創(chuàng)建兩個Cat類型的對象 Cat cat1 = new Cat{} Cat cat2 = new Cat{} //賦值給對象的屬性 cat1.weight=45.2; cat1.age=2; cat2.weight=35.5; cat2.age=1; //把對象存入數組元素 cats[0] = cat1; cat2[1] = cat2; } }
根據代碼,我們可以知道。我們創(chuàng)建了Cat類型的引用類型數組cats,所以,數組cats中的元素,應該存放Cat對象的引用。
所以我們把對象引用變量cat1,cat2作為cats數組的元素存入數組。
我們繼續(xù)看內存解析,如下圖:
代碼執(zhí)行順序如上圖序號所示,所以在堆內存中,引用類型的數組元素就是一個對象的引用。
它們在賦值過程中相當于是把自己的指向地址給了數組元素,可以說是cat1=cats[0]。
還可以把引用看做是一個堆內存地址指針,它指向的堆內存的對象。
3、數組元素就是變量
看過了上面兩個例子,基本類型數組和引用類型數組初始化,我們可以得出一個結論:**數組元素就是變量**。
int[] ints; //int[]數組的元素相當于int類型的變量 String[] strs;//String[]數組的元素相當于String類型的變量 Cat[] cats;//Cat[]數組的元素相當于Cat類型的變量
在引用類型數組初始化的內存圖解中也能看出來數組元素就是變量這個結論。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
三分鐘教你如何在IDEA中快速創(chuàng)建工程的方法
這篇文章主要介紹了三分鐘教你如何在IDEA中快速創(chuàng)建工程的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-04-04Java?實戰(zhàn)項目之學生信息管理系統(tǒng)的實現流程
讀萬卷書不如行萬里路,只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實現學生信息管理系統(tǒng),大家可以在過程中查缺補漏,提升水平2021-11-11springBoo3.0集成knife4j4.1.0的詳細教程(swagger3)
這篇文章主要介紹了springBoo3.0集成knife4j4.1.0的詳細教程(swagger3),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07