Java基礎(chǔ)之?dāng)?shù)組的初始化過程
Java基礎(chǔ)總結(jié)
一、數(shù)組初始化
1、數(shù)組初始化概念
Java是靜態(tài)語言,因此Java的數(shù)組也是靜態(tài)的。就是說數(shù)組在被初始化后數(shù)組的長度是不可改變的。而Java的數(shù)組初始化就是給數(shù)組對象分配內(nèi)存空間并且給每個數(shù)組元素給予初始值。
數(shù)組的幾種初始化方式:
靜態(tài)初始化:程序員決定數(shù)組元素的初始值,系統(tǒng)決定長度。
String[] names = new String[]{"張三","李四","王五"};
String[] books = {"射雕英雄傳","天龍八部","笑傲江湖"};動態(tài)初始化:程序員只決定數(shù)組元素的長度,系統(tǒng)分配元素初始值(通常為null,0等)。
String[] strAll = new String[5];
數(shù)組對象的長度初始化后長度就不可改變了,他們在堆內(nèi)存中已經(jīng)開辟了對應(yīng)大小的內(nèi)存空間。
數(shù)組變量是一個引用類型的變量,數(shù)組變量在棧內(nèi)存中指向存放在堆內(nèi)存中的數(shù)組對象。內(nèi)存分配如下圖所示:

2、基本類型數(shù)組和引用類型的數(shù)組初始化的不同
2.1、基本類型數(shù)組初始化
對于基本類型的數(shù)組,他們的初始化就是在堆內(nèi)存中開辟一個固定長度和大小的空間用于存儲基本類型數(shù)據(jù)。
比如int(初始值為0),float(初始值為0.0),char(初始值為‘\u0000’),boolean(初始值為false)等。
對應(yīng)數(shù)組類型只能存儲對應(yīng)的數(shù)據(jù),并且可以替換,但唯一不變的是數(shù)組的長度大小不會變。
我們看看下面這個方法
public static void main(String[] args){
//動態(tài)初始化int數(shù)組nums,長度為5
int[] nums = [5];
//給nums數(shù)組設(shè)置元素
for(i=0;i<5;i++){
nums[i]=i;
}
}根據(jù)這段代碼,我們可以得出它在內(nèi)存中的變化是怎么樣,看下圖:

從這個圖可以看出,基本類型的數(shù)組元素都是存在數(shù)組開辟的內(nèi)存空間中,并且長度不變,元素可以替換。相當(dāng)于一個瓶子里可以裝可樂也可以裝雪碧,只要你是液體的就行,瓶子只有那么大只能裝那么多。
2.1、引用類型數(shù)組初始化
引用類型的數(shù)組,它初始化完成后數(shù)組長度也是固定的,和基本類型數(shù)組不同的地方就是數(shù)組對象元素。
基本類型數(shù)組元素是存放對應(yīng)基本類型的元素具體值,而引用類型數(shù)組對象元素存放的是引用,這個引用指向堆內(nèi)存中另一塊內(nèi)存空間。
看例子:
public class Cat{
//體重
public double weight;
//年齡
public int age;
}
public class Test{
public static void main(String[] args){
//定義一個數(shù)組變量cats,類型是Cat{}
Cat[] cats;
//執(zhí)行動態(tài)初始化數(shù)組,長度為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;
//把對象存入數(shù)組元素
cats[0] = cat1;
cat2[1] = cat2;
}
}根據(jù)代碼,我們可以知道。我們創(chuàng)建了Cat類型的引用類型數(shù)組cats,所以,數(shù)組cats中的元素,應(yīng)該存放Cat對象的引用。
所以我們把對象引用變量cat1,cat2作為cats數(shù)組的元素存入數(shù)組。
我們繼續(xù)看內(nèi)存解析,如下圖:

代碼執(zhí)行順序如上圖序號所示,所以在堆內(nèi)存中,引用類型的數(shù)組元素就是一個對象的引用。
它們在賦值過程中相當(dāng)于是把自己的指向地址給了數(shù)組元素,可以說是cat1=cats[0]。
還可以把引用看做是一個堆內(nèi)存地址指針,它指向的堆內(nèi)存的對象。
3、數(shù)組元素就是變量
看過了上面兩個例子,基本類型數(shù)組和引用類型數(shù)組初始化,我們可以得出一個結(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ù)組元素就是變量這個結(jié)論。
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
java實(shí)現(xiàn)字符串匹配求兩個字符串的最大公共子串
這篇文章主要介紹了java實(shí)現(xiàn)求兩個字符串最大公共子串的方法,詳細(xì)的描述了兩個字符串的最大公共子串算法的實(shí)現(xiàn),需要的朋友可以參考下2016-10-10
SpringSecurity集成圖片驗(yàn)證碼的詳細(xì)過程
SpringSecurity是通過過濾器鏈來完成的,接下來的驗(yàn)證碼,可以嘗試創(chuàng)建一個過濾器放到Security的過濾器鏈中,在自定義的過濾器中比較驗(yàn)證碼,本文通過實(shí)例代碼介紹SpringSecurity集成圖片驗(yàn)證碼的詳細(xì)過程,感興趣的朋友一起看看吧2023-12-12

