【Java圖文趣味版】快速搞定數組的聲明、開辟空間和初始化賦值

0 前言

本文講解java數組的基礎知識,適合零基礎小白。

1 數組的概念

所謂數組,就是一組同類型東西的集合,可以通過index(索引,下標)訪問這一組東西的某一個元素。

就像下圖這樣,由于數組概念過于簡單,不解釋了。
在這里插入圖片描述

2 數組的定義及使用

2.1 數組的聲明(Declare an array)

所謂聲明,就是告訴你,這里有這么個東西,但是它既沒有空間,也沒有數值,在被使用之前,它可以看做 “一句空話”

有以下兩種寫法

int a [];
int [] b;

順便說一句,這兩種形式都可以聲明數組,但是在Java中,通常我們使用后者,之后的內容也全部使用int [] b的形式。
在這里插入圖片描述

2.2 數組的聲明和開辟內存空間(Open up a memory space)

聲明一個數組,并且為它開辟一個空間,占個地方,但是不在里面存放東西

有以下寫法

int [] a = new int [4];

在這里插入圖片描述
另外,可能出現沒有占到地方的情況,我們后面會說(第4節)。

2.3 數組的聲明、開辟內存空間和初始化賦值(Initialize an array)

有以下兩種寫法

int [] a = {11,22,33,44};
int [] b = new int [] {11,22,33,44};

在這里插入圖片描述
對于以下語句

new int [] {11,22,33,44};

它的本質,是一個匿名數組,就是不宣布數組的名稱,但是仍然創建了一個數組。因此它可以作為一個游蕩的數組,靈活使用于很多場景。

例如

return new int [] {1,2,3,4};

對于任意的,只需要使用數組,但是不需要定義數組名稱的地方,都可以使用這個表達式。
在這里插入圖片描述
另外,可能出現賦空值的情況,比如直接就是{},里面沒有東西,我們在后面會說明(第4節)。

2.4 聲明之后如何開辟空間和賦值

做出聲明之后

int [] a;

如何開辟空間和賦值呢?

  1. 首先,關于開辟空間,和前面完全一樣,只不過把2.2節的語句int [] a = new int [4];拆開寫了
int [] a;
a = new int [4];
  1. 然后,關于賦值,同理,結合2.3節的語句,也是拆開寫了
int [] a;
a = new int [4];
a[0] = 11;
a[1] = 22;
a[2] = 33;
a[3] = 44;

或者使用另外一條語句

int [] a;
a = new int [] {11,22,33,44};

2.5 聲明和開辟空間之后如何賦值

int [] a = new int [4];

在這之后,如何賦值,我就不多說了。

a[0] = 11;
a[1] = 22;
a[2] = 33;
a[3] = 44;

當然怎么賦值都可以,需要注意的是開辟空間后的數組的訪問方式,對于a[0]這樣的語句是什么意思,我們后面說。

2.6 賦值之后如何使用

通過下標訪問即可,只要是開辟了空間或者已經賦值的,都可以這樣,例如a[0],需要注意幾點

  • 下標從0開始,可以是變量,例如int zero = 0;訪問的時候可以寫a[zero];
  • 開辟空間后,數組長度固定(變長數組以后再說)

3 在項目中規范化地定義和使用數組

不建議直接出現數字,因為數字的含義有很多,時間長了自己可能不記得數字的具體含義,其他程序員看到這個數字,也可能會費解,因此,建議將數字符號化,例如:

存儲10個學生的總分數

建議這樣使用

int studentCount = 10;
double [] studentSumScore = new double [studentCount];

而不是下面這種寫法

double [] studentSumScore = new double [10];

這樣的寫法,對于復雜的程序,時間長了,可能會迷茫,10代表啥?這是啥?
在這里插入圖片描述
你也許會說,不是可以有注釋嗎?我只能告訴你:能在程序中說明白的,就不要添加注釋

另外,關于數組的訪問,也可以參考,比如把studentSumScore[0]寫成studentSumScore[stuOne]

具體有沒有必要,還是結合實際,如果是徒增麻煩,就不要用了。

4 數組中的特殊值:0與null

首先明確一下,先分成兩類

  1. 針對數組本身: 數組的長度為0和數組本身為null
  2. 數組元素內容: 數組不為0,數組元素的值為0或者為null

0與null的含義

  • 二者本質上,都是某種具有含義的特殊數值
  • 0就是空empty,本身存在,但是沒有內容,啥都沒有
  • null就是虛無,就是本身不存在,更沒有內容

4.1 數組本身

數組長度為0,空數組,但是為其分配了內存空間的位置(有一席之地)

int[] a = new int[0];
int[] b = new int[]{};

在這里插入圖片描述
數組為null,系統沒有為其分配其內存空間(沒有地方,只能流浪)

int[] c = null;

在這里插入圖片描述

4.2 數組元素內容

前提是,創建了一個非空的數組。

這里特指:為一個數組開辟了空間但是沒有賦值時候,數組元素的值可能為0,可能為null

例如以下形式,其中,int可以代表基本數據類型和引用數據類型(float,boolean,String)

int[] a = new int[4];

其中

  • 數值型的數據類型,默認初始化為0
  • 字符型,默認為空字符
  • 布爾型,默認為false
  • 對象(引用數據類型),比如String,默認為null

以下為實例測試

int[] b = new int[10];
System.out.println("int默認:\t"+b[0]);boolean[] g = new boolean[4];
System.out.println("boolean默認:"+g[0]);char[] w = new char[4];
System.out.println("char默認:\t"+w[0]);String[] c = new String[10];
System.out.println("String默認:\t"+c[0]);

輸出結果為
在這里插入圖片描述
下一篇文章:【java圖文趣味版】數組元素的訪問與遍歷

本文中圖片使用億圖圖示(試用版)制作,之后截圖上傳,侵刪。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/384732.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/384732.shtml
英文地址,請注明出處:http://en.pswp.cn/news/384732.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【java圖文趣味版】數組元素的訪問與遍歷

0 前言 本文適合零基礎小白。 本文接上一篇文章:快速搞定數組的聲明、開辟空間和初始化賦值 重要的知識點 通過array index訪問數組使用for each循環遍歷數組使用Arrays.toString()方法打印數組 我們先創建一個數組,之后通過它來說明后面的知識。 …

初來乍到,多多關照。

從今天開始就要開始寫博客了,把學到的知識都在這里記錄下來,希望可以堅持,并且學到東西。

【MySQL】AUTO_INCREMENT只能應用于數值類型的列,且該列需要被索引

MySQL中的自動增量AUTO_INCREMENT,是有使用條件的 該列(column)的數據類型必須是數值型(這點容易理解,數值才能自增)該列必須被索引,比如定義為主鍵(PRIMARY KEY) 感悟…

【數據庫】數據模型基礎概念(圖文版)

0 前言 本文通過一個實例,來講解數據模型的基礎概念。 要求設計一個數據庫的數據模型,統計出你的宿舍每個人(4個人)的信息,要求包括 個人信息:學號、姓名、班級、年級、學院選課情況:學號、課程…

利用SIGCHLD信號回收子進程

子進程執行結束之后,父進程如果不對其進行回收,子進程就會變為僵尸進程。 父進程可以通過調用wait()函數和waitpid()函數去回收子進程. 由于子進程結束時會發送SIGCHLD信號給父進程,不過此信號的默認動作為忽略,我們可以通過系統函…

【匯編語言】8086匯編語言的debug中,t和p命令的區別

單步跟蹤命令(單步進入(step in)):t命令是單步執行,是真的單步執行,碰到任何地方,都會一步步執行,遇到子程序,也會進入里面一步步執行再返回 單步執行命令(單步通過(ste…

哲學家就餐問題(如何避免死鎖)(多線程版)

哲學家就餐問題 多線程編程中&#xff0c;常常會遇到線程間訪問共享資源的問題&#xff0c;如果處理不當則會發生死鎖&#xff0c;某一個線程可能永遠訪問不到共享資源。 為了避免死鎖的發生&#xff0c;提出哲學家就餐問題。 下面展示一些代碼片段 #include <stdio.h>…

【匯編語言】匯編語言如何編程,如何避免出錯

0 前言 這里以8086匯編語言舉例。 1 重要方法&#xff1a;畫流程圖 這一點不再多說&#xff01;你懂的&#xff01;只要真的畫流程圖&#xff0c;并且按此翻譯為匯編代碼&#xff0c;程序出錯幾率就會減少很多。 2 框架思維&#xff1a;構建標準編程框架 這里只舉例說明一…

【匯編語言】8086匯編字符串定義為何使用DB?其他數據類型不可以嗎?(20200515復盤)

目錄0 前言0.1 先告訴你結論1 8086匯編語言中的字符串1.1 字符串的定義與使用1.2 直接定義的細節1.2.1 使用DB數據類型1.2.2 使用其他數據類型1.3 直接使用的細節1.3.1 賦值給寄存器1.3.2 賦值給內存單元1.3.3 字符串直接使用的本質1.4 應用2 擴展&#xff1a;數據定義的方式3 …

哲學家就餐(避免死鎖)(多進程版)

哲學家就餐&#xff08;避免死鎖&#xff09;&#xff08;多進程版&#xff09; 哲學家就餐利用信號量在多進程之間實現 下面展示一些代碼片段 #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/wait.h> #include <sys…

【匯編語言】數據類型的匹配問題:自動匹配與手動匹配

0 前言 本文基于8086匯編語言&#xff0c;不過x86系列語言具備向下兼容特點&#xff0c;大多數情況都可以用。 與高級語言數據類型的自動轉換和強制轉換一樣&#xff0c;匯編語言的數據類型也有 自動匹配和手動匹配。 下面&#xff0c;我來介紹一下匯編語言的相關原則。 1 …

生產者消費者模型(條件變量+互斥鎖)

生產者消費者模型 線程同步典型的案例即為生產者消費者模型&#xff0c;而借助條件變量來實現這一模型&#xff0c;是比較常見的一種方法。假定有兩個線程&#xff0c;一個模擬生產者行為&#xff0c;一個模擬消費者行為。兩個線程同時操作一個共享資源&#xff0c;生產者向其…

【匯編語言】王爽實驗8,分析一個奇怪的程序,學習筆記(20200517)

0 前言 先給出源程序 assume cs:code code segmentmov ax,4c00hint 21hstart:mov ax,0s:nopnopmov di,offset smov si,offset s2mov ax,cs:[si]mov cs:[di],axs0:jmp short ss1:mov ax,0int 21hmov ax,0s2:jmp short s1nopcode ends end start運行結果&#xff1a;本程序能夠…

Qt制作定時關機小程序

文章目錄 完成效果圖ui界面ui樣圖 main函數窗口文件頭文件cpp文件 引言 一般定時關機采用命令行模式&#xff0c;還需要我們計算在多久后關機&#xff0c;我們可以做一個小程序來定時關機 完成效果圖 ui界面 <?xml version"1.0" encoding"UTF-8"?>…

MIPS快速入門(原文+翻譯):MIPS Architecture and Assembly Language Overview(持續更新中)

前言 發布該文章的網站已經無法訪問&#xff0c;無法獲得相關翻譯授權&#xff0c;本人的翻譯僅供大家參考學習&#xff0c;盡可能使用直譯&#xff0c;并加上一些譯者注&#xff08;使用“ [1] ”的形式&#xff09;&#xff0c;以減少信息損失&#xff0c;水平有限&#xff…

Visual Studio 編譯優化選項:Debug與Release、禁止優化與O1、O2、Ox優化

Debug與禁止優化 Debug模式是調試模式&#xff0c;會有很多冗余的調試代碼&#xff0c;供開發者調試程序使用。 VS是默認使用Debug模式的&#xff0c;我使用的是VS 2017。 在Debug模式下&#xff0c;是默認開啟禁止優化的&#xff0c;我們來查看一下 在左側源文件的main.c處…

【匯編語言】記錄一組數中負數的個數,8086與MIPS匯編程序

題目及解答 統計由DATA開始的字節數據串中負元素的個數&#xff0c;數據個數在COUNT單元&#xff0c;統計結果存入RLT單元。 8086匯編&#xff1a; ; 統計數字中負數的個數【循環中加了個if else】 assume ds:datasg datasg segmentdata db 1,-2,-3,-1,-4,0,-2 count dw 7 ; 數…

【數字邏輯入門】計算機如何存儲1位二進制數

0 前言 本文將會以R-S鎖存器為例&#xff0c;引出鎖存器的核心和本質&#xff0c;之后再帶你構建更多類型的鎖存器&#xff0c;你能夠&#xff1a; 感受到由淺入深的學習方式體會到掌握核心本質的快感深刻理解核心套外殼的設計理念&#xff08;產品迭代1.0–>2.0–>3.0…

【算法訓練】DAY1:整數反轉

1 前言 題目來源于Leetcode。 重點&#xff1a;理清邏輯&#xff0c;忽略細節&#xff0c;模仿高手&#xff0c;五毒神掌 2 題目分析 題目很容易理解&#xff0c;先分成兩個部分 正數負數 先解決正數 最開始想到的是 intchar數組long唯一增加的就是&#xff0c;先判斷整…