欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java基礎(chǔ)之?dāng)?shù)組的初始化過程

 更新時間:2024年10月21日 11:00:45   作者:john_heping  
Java數(shù)組分為靜態(tài)和動態(tài)初始化,靜態(tài)初始化中,程序員設(shè)定元素初始值,系統(tǒng)決定長度;動態(tài)初始化中,程序員設(shè)定長度,系統(tǒng)提供初始值,數(shù)組初始化后長度固定,存儲在堆內(nèi)存中,數(shù)組變量在棧內(nèi)存指向堆內(nèi)存數(shù)組對象,基本類型數(shù)組存儲數(shù)據(jù)值,引用類型數(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)文章

最新評論