Java基礎(chǔ)之?dāng)?shù)組的初始化過程
Java基礎(chǔ)總結(jié)
一、數(shù)組初始化
1、數(shù)組初始化概念
Java是靜態(tài)語(yǔ)言,因此Java的數(shù)組也是靜態(tài)的。就是說數(shù)組在被初始化后數(shù)組的長(zhǎng)度是不可改變的。而Java的數(shù)組初始化就是給數(shù)組對(duì)象分配內(nèi)存空間并且給每個(gè)數(shù)組元素給予初始值。
數(shù)組的幾種初始化方式:
靜態(tài)初始化:程序員決定數(shù)組元素的初始值,系統(tǒng)決定長(zhǎng)度。
String[] names = new String[]{"張三","李四","王五"}; String[] books = {"射雕英雄傳","天龍八部","笑傲江湖"};
動(dòng)態(tài)初始化:程序員只決定數(shù)組元素的長(zhǎng)度,系統(tǒng)分配元素初始值(通常為null,0等)。
String[] strAll = new String[5];
數(shù)組對(duì)象的長(zhǎng)度初始化后長(zhǎng)度就不可改變了,他們?cè)诙褍?nèi)存中已經(jīng)開辟了對(duì)應(yīng)大小的內(nèi)存空間。
數(shù)組變量是一個(gè)引用類型的變量,數(shù)組變量在棧內(nèi)存中指向存放在堆內(nèi)存中的數(shù)組對(duì)象。內(nèi)存分配如下圖所示:
2、基本類型數(shù)組和引用類型的數(shù)組初始化的不同
2.1、基本類型數(shù)組初始化
對(duì)于基本類型的數(shù)組,他們的初始化就是在堆內(nèi)存中開辟一個(gè)固定長(zhǎng)度和大小的空間用于存儲(chǔ)基本類型數(shù)據(jù)。
比如int(初始值為0),float(初始值為0.0),char(初始值為‘\u0000’),boolean(初始值為false)等。
對(duì)應(yīng)數(shù)組類型只能存儲(chǔ)對(duì)應(yīng)的數(shù)據(jù),并且可以替換,但唯一不變的是數(shù)組的長(zhǎng)度大小不會(huì)變。
我們看看下面這個(gè)方法
public static void main(String[] args){ //動(dòng)態(tài)初始化int數(shù)組nums,長(zhǎng)度為5 int[] nums = [5]; //給nums數(shù)組設(shè)置元素 for(i=0;i<5;i++){ nums[i]=i; } }
根據(jù)這段代碼,我們可以得出它在內(nèi)存中的變化是怎么樣,看下圖:
從這個(gè)圖可以看出,基本類型的數(shù)組元素都是存在數(shù)組開辟的內(nèi)存空間中,并且長(zhǎng)度不變,元素可以替換。相當(dāng)于一個(gè)瓶子里可以裝可樂也可以裝雪碧,只要你是液體的就行,瓶子只有那么大只能裝那么多。
2.1、引用類型數(shù)組初始化
引用類型的數(shù)組,它初始化完成后數(shù)組長(zhǎng)度也是固定的,和基本類型數(shù)組不同的地方就是數(shù)組對(duì)象元素。
基本類型數(shù)組元素是存放對(duì)應(yīng)基本類型的元素具體值,而引用類型數(shù)組對(duì)象元素存放的是引用,這個(gè)引用指向堆內(nèi)存中另一塊內(nèi)存空間。
看例子:
public class Cat{ //體重 public double weight; //年齡 public int age; } public class Test{ public static void main(String[] args){ //定義一個(gè)數(shù)組變量cats,類型是Cat{} Cat[] cats; //執(zhí)行動(dòng)態(tài)初始化數(shù)組,長(zhǎng)度為2 cats = new Cat[2]; //創(chuàng)建兩個(gè)Cat類型的對(duì)象 Cat cat1 = new Cat{} Cat cat2 = new Cat{} //賦值給對(duì)象的屬性 cat1.weight=45.2; cat1.age=2; cat2.weight=35.5; cat2.age=1; //把對(duì)象存入數(shù)組元素 cats[0] = cat1; cat2[1] = cat2; } }
根據(jù)代碼,我們可以知道。我們創(chuàng)建了Cat類型的引用類型數(shù)組cats,所以,數(shù)組cats中的元素,應(yīng)該存放Cat對(duì)象的引用。
所以我們把對(duì)象引用變量cat1,cat2作為cats數(shù)組的元素存入數(shù)組。
我們繼續(xù)看內(nèi)存解析,如下圖:
代碼執(zhí)行順序如上圖序號(hào)所示,所以在堆內(nèi)存中,引用類型的數(shù)組元素就是一個(gè)對(duì)象的引用。
它們?cè)谫x值過程中相當(dāng)于是把自己的指向地址給了數(shù)組元素,可以說是cat1=cats[0]。
還可以把引用看做是一個(gè)堆內(nèi)存地址指針,它指向的堆內(nèi)存的對(duì)象。
3、數(shù)組元素就是變量
看過了上面兩個(gè)例子,基本類型數(shù)組和引用類型數(shù)組初始化,我們可以得出一個(gè)結(jié)論:**數(shù)組元素就是變量**。
int[] ints; //int[]數(shù)組的元素相當(dāng)于int類型的變量 String[] strs;//String[]數(shù)組的元素相當(dāng)于String類型的變量 Cat[] cats;//Cat[]數(shù)組的元素相當(dāng)于Cat類型的變量
在引用類型數(shù)組初始化的內(nèi)存圖解中也能看出來數(shù)組元素就是變量這個(gè)結(jié)論。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MybatisPlus字段類型轉(zhuǎn)換的實(shí)現(xiàn)示例
本文主要介紹了MybatisPlus如何完成字段類型轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03三分鐘教你如何在IDEA中快速創(chuàng)建工程的方法
這篇文章主要介紹了三分鐘教你如何在IDEA中快速創(chuàng)建工程的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04Mybatis Plus查詢時(shí)sql字段名大小寫報(bào)錯(cuò)的解決
這篇文章主要介紹了Mybatis Plus查詢時(shí)sql字段名大小寫報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12Java?實(shí)戰(zhàn)項(xiàng)目之學(xué)生信息管理系統(tǒng)的實(shí)現(xiàn)流程
讀萬(wàn)卷書不如行萬(wàn)里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2021-11-11Java實(shí)現(xiàn)選擇排序算法的實(shí)例教程
這篇文章主要介紹了Java實(shí)現(xiàn)選擇排序算法的實(shí)例教程,選擇排序的時(shí)間復(fù)雜度為О(n²),需要的朋友可以參考下2016-05-05springBoo3.0集成knife4j4.1.0的詳細(xì)教程(swagger3)
這篇文章主要介紹了springBoo3.0集成knife4j4.1.0的詳細(xì)教程(swagger3),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07spring boot項(xiàng)目快速構(gòu)建的全步驟
這篇文章主要給大家介紹了關(guān)于spring boot項(xiàng)目快速構(gòu)建的全步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用spring boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09java調(diào)用Oracle存儲(chǔ)過程的方法實(shí)例
這篇文章介紹了java調(diào)用Oracle存儲(chǔ)過程的方法實(shí)例,有需要的朋友可以參考一下2013-09-09Java窗體中關(guān)于默認(rèn)布局管理器容易踩的坑及解決
這篇文章主要介紹了Java窗體中關(guān)于默認(rèn)布局管理器容易踩的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12