亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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)文章

最新評(píng)論