Java數(shù)組的動(dòng)態(tài)初始化和常見問題解析
一、為什么有數(shù)組動(dòng)態(tài)初始化呢?
如果一開始就知道數(shù)組里的數(shù)據(jù),就可以使用靜態(tài)初始化去完成。
但是如果一開始就不知道要添加什么數(shù)據(jù),那此時(shí)大括號(hào)中寫什么呢?
int[] arr = {1, 2, 3, 4, 5}; int[] arr = {????}
是不是感覺寫什么都不太合適。所以動(dòng)態(tài)初始化和靜態(tài)初始化的應(yīng)用場(chǎng)景是不一樣的。
二、動(dòng)態(tài)初始化
動(dòng)態(tài)初始化:初始化時(shí)只指定數(shù)組長(zhǎng)度,由系統(tǒng)為數(shù)組分配初始值。
格式:
數(shù)據(jù)類型[] 數(shù)組名 = new 數(shù)據(jù)類型[數(shù)組長(zhǎng)度];
示例:
下述代碼表示arr數(shù)組里只能存3個(gè)int類型的整數(shù)。
int[] arr = new int[3];
三、代碼示例
需求:
定義一個(gè)數(shù)組,用來存班級(jí)中50個(gè)學(xué)生的姓名。
姓名未知,等學(xué)生報(bào)道之后,再進(jìn)行添加。
package com.itheima.arraydemo; public class ArrayDemo4 { public static void main(String[] args) { //格式: //數(shù)據(jù)類型[] 數(shù)組名 = new 數(shù)據(jù)類型[數(shù)組的長(zhǎng)度]; //在創(chuàng)建的時(shí)候,由我們自己指定數(shù)組的長(zhǎng)度,由虛擬機(jī)給出默認(rèn)的初始化值 String[] arr = new String[50]; //添加學(xué)生 arr[0] = "zhangsan"; arr[1] = "lisi"; //獲取 System.out.println(arr[0]);//zhangsan System.out.println(arr[1]);//lisi System.out.println(arr[2]);//打印出來的是默認(rèn)初始化值null } }
四、數(shù)組默認(rèn)初始化值的規(guī)律
- 整數(shù)類型:默認(rèn)初始化值0
- 小數(shù)類型:默認(rèn)初始化值0.0
- 字符類型:默認(rèn)初始化值’\u0000’ 空格
- 布爾類型:默認(rèn)初始化值 false
- 引用數(shù)據(jù)類型:默認(rèn)初始化值 null,String就是一個(gè)引用數(shù)據(jù)類型
int[] arr2 = new int[3]; System.out.println(arr2[0]);//0 System.out.println(arr2[1]);//0 System.out.println(arr2[2]);//0
五、數(shù)組動(dòng)態(tài)初始化和靜態(tài)初始化的區(qū)別
1、動(dòng)態(tài)初始化:手動(dòng)指定數(shù)組長(zhǎng)度,由系統(tǒng)給出默認(rèn)初始化值。
只明確元素個(gè)數(shù),不明確具體數(shù)值,推薦使用動(dòng)態(tài)初始化
例如:使用數(shù)組容器來存儲(chǔ)鍵盤錄入的5個(gè)整數(shù)。
int[] arr = {????}; // 不明確數(shù)組中應(yīng)該存儲(chǔ)哪些 int[] arr = new int[5]; // 就使用動(dòng)態(tài)初始化
2、靜態(tài)初始化:手動(dòng)指定數(shù)組元素,系統(tǒng)會(huì)根據(jù)元素個(gè)數(shù),計(jì)算出數(shù)組的長(zhǎng)度。
需求中已經(jīng)明確了要操作的具體數(shù)據(jù),直接靜態(tài)初始化即可。
例如:將全班的學(xué)生成績(jī)存入數(shù)組中:11,22 ,33
int[] arr = {11, 22, 33};
六、數(shù)組常見問題:越界
當(dāng)訪問了數(shù)組中不存在的索引,就會(huì)引發(fā)索引越界異常
package com.itheima.arraydemo; public class ArrayDemo5 { public static void main(String[] args) { //1.定義一個(gè)數(shù)組 int[] arr = {1,2,3,4,5}; //長(zhǎng)度:5 //最小索引:0 //最大索引:4(數(shù)組的長(zhǎng)度 - 1) //如果訪問的數(shù)字不在這個(gè)范圍(0 ~ 4)就會(huì)報(bào)索引越界異常 System.out.println(arr[2]); //小結(jié): //索引越界異常 //原因:訪問了不存在的索引 //避免:只要知道索引的范圍就行了 //最小索引:0 //最大索引:(數(shù)組的長(zhǎng)度 - 1) } }
下圖的紅色就表示代碼出現(xiàn)了問題,通常我們也會(huì)說代碼報(bào)錯(cuò)了。
閱讀報(bào)錯(cuò)的信息:Exception:異常,異常在main里。java.lang.ArrayIndexOutOfBoundsException
是異常的名字,叫做:索引越界異常。后面就會(huì)緊接著異常出現(xiàn)的解釋:
Index 10 out of bounds for length 5
索引10已經(jīng)超過了長(zhǎng)度為5的數(shù)組。
at:表示 在
。com.itheima.arraydemo
是包名,ArrayDemo5
是類名。
main
是方法名。ArrayDemo5.java:10
表示異常出現(xiàn)的位置,這里就表示在第10行出現(xiàn)了問題。
點(diǎn)一下,它就會(huì)自動(dòng)跳轉(zhuǎn)到第10行。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot?maven?打包插件介紹及注意事項(xiàng)說明
這篇文章主要介紹了springboot?maven?打包插件介紹及注意事項(xiàng)說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12簡(jiǎn)單易懂的Java Map數(shù)據(jù)添加指南
Java提供了多種方法來往Map中添加數(shù)據(jù),開發(fā)者可以根據(jù)具體需求選擇合適的方法,需要的朋友可以參考下2023-11-11解決springboot整合cxf啟動(dòng)報(bào)錯(cuò),原因是版本問題
這篇文章主要介紹了解決springboot整合cxf啟動(dòng)報(bào)錯(cuò),原因是版本問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07Springboot整合多數(shù)據(jù)源代碼示例詳解
這篇文章主要介紹了Springboot整合多數(shù)據(jù)源代碼示例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08SpringBoot項(xiàng)目啟動(dòng)報(bào)錯(cuò)踩坑實(shí)戰(zhàn)記錄
這篇文章主要給大家介紹了關(guān)于SpringBoot項(xiàng)目啟動(dòng)報(bào)錯(cuò)踩坑的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-02-02