您好,登錄后才能下訂單哦!
這篇“Java數組正確的寫法是什么”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Java數組正確的寫法是什么”文章吧。
索引:命名規則、自動類型推斷、靜態動態初始化、多維數組的其他寫法、常見錯誤寫法、數組下標越界、默認值問題、數組長度問題、數組內存解析
1.步驟分類:(以下int可以替換為char String double等等)
①一步寫法:
int [] ids = new int []{1001,1002,1003};// 聲明+初始化 int ids [] = new int []{1001,1002,1003}; // [ ]位置有兩種放法 int ids [] = {1001,1002,1003};//自動類型推斷,new int []可省 /**********錯誤示范***錯誤示范***錯誤示范***錯誤示范************/ int ids [] = new [] int{1001,1002,1003};//只有定義時的[]可以亂動
自動類型推斷:僅在一步寫法中適用,可以省略=右邊的new int [ ]
②兩步寫法:
int ids [] ; //聲明 ids = new int [ ] {1001,1002,1003} ; //初始化 /**********錯誤示范***錯誤示范***錯誤示范***錯誤示范************/ int ids []; ids [] = new int {1001,1002,1003};//分兩步時,左邊不加[] int ids []; ids = {1001,1002,1003};//分兩步時,沒有類型推斷
2.狀態分類:靜態動態必須二選一,給長度不加{},給{}不加長度
①靜態初始化:
兩個[ ]均為空 String [] name = new String [] {"張三","李四"} ; //也可寫為String [] name = {"張三","李四"};
②動態初始化:
后面的[ ]必須帶數字規定長度,并且不能{}賦值 String [ ] name ; name = new String [2] ; //可以合為一步寫String name [] = new String [2]; /**********錯誤示范****錯誤示范****錯誤示范********/ int ids [3][4] = XXXXXXXXX; int ids [3][ ] = XXXXXXXXX; int ids [ ][4] = XXXXXXXXX;
int arr1 [][] =XXXXXXXXXXX; int [] arr2 []=XXXXXXXXXXX; int [][] arr3 =XXXXXXXXXXX; //都是正確寫法 Java主張 int [] arr = new int []{}; 寫法 //多維數組同理 int [] arr[][] =XXXXXXXX; int [][] arr[] =XXXXXXXX; 隨便瞎基8放都是正確的 Java主張 int [][] arr = new int [][]{};寫法 不過我個人不習慣。。。
int arr0 [][] = {{1,2},{3,4},{5,6}};//正確:靜態、自動類型推斷 int arr1 [][] = new int [3][2]; int arr2 [][] = new int [3][ ];//正確:動態、可省列數[] int arr3 [][][] = new int [3][ ][ ];//正確:動態、可省后兩個[]
默認值問題:動態[i][j]有默認值,靜態{}沒有默認值(末尾詳解)
int arr0 [][] = new int [2][2];//動態初始化,分配內存 //數組內的4個成員全部默認為0,編譯運行都不會報錯 int arr0 [][] = new int [][]{ {1,2},{3} }; //靜態初始化,編譯能通過,arr0[1][1]沒有默認值(未分配空間) //編譯能通過,運行到arr[1][1]會報錯 int arr0[][] = new int [3][] ; // 輸出arr0[3][0] arr0[3][1] arr0[3][2] arr0[3][3]....... //都會報錯
報錯案例:
數組下標越界:arr[1][1]在靜態初始化的時候沒有給值,所以沒有分配內存空間,編譯能通過,但是訪問的時候會報錯。該靜態初始化的數組范圍僅限于arr[0][0] arr[0][1] 到arr[1][0]
String cod [][] = new String [3][ ];//只定義了行,列數未知
System.out.println(cod[1][1]);//未定義列,不給默認值。運行報錯
正確寫法:加一步 cod[1]=new String [2\3\4....];分配列內存,給定默認值null
① int [ ] arr1 = new int [ ] ; //靜態忘帶{}
② int [3] arr2 = new int [3] ; //前面[ ]必須空
③ int [ ] arr3 = new int [5] {1,2,3,4,5} ; //動態不能帶{ }
數組的內存分配是連續的,系統要為數組分配一個固定的空間,如果100個空間以后被其他內容占用內存,那么數組就只能用到前99個空間,如果長度可以改變,那么arr[100]就會更改其他內容產生bug
二維數組遍歷,兩層for循環:
public class Test2 { public static void main(String args[]) { int arr[][] = { {1,2,3},{4,5,6,7},{8,9},{10}}; for(int i = 0 ; i <arr.length ; i++){//arr.length for(int j = 0 ; j<arr[i].length ;j++){//arr[i].length System.out.println(arr[i][j]+" "); } System.out.println(); } //System.out.println(arr[2][2]);報錯下標越界 } }
運行結果:
arr.length是第一維度長度
arr[i].length是第i行的第二維度長度
arr[i][j].length是第i行j列的第三維度的長度
以二維數組為例,分為內層和外層。形如arr[0] arr[1]的是外層,完整表達arr[1][2]的是內層
一、對于一個外層arr[1]來說,它就是一個一維數組,就會分為“初始化”和“未初始化”的兩種情況:
例1:
int arr1[][] = new int [3][]; System.out.println( arr1[1] ); //運行結果:null
此時只知道外層行數,但內層沒有初始化,沒有分配地址,故結果為null
int arr1[][] = new int [3][5];//任意給定列數 System.out.println(arr1[1]); //運行結果:[I@15db9742
此時內層長度確定,初始化完成,arr1[1]指向一個首地址[I@15db9742
一個 [ 表示arr[1]的內層為一維數組,I是int的首字母,@后面是地址
例2:
String arr1[][] = new String [3][5]; System.out.println(arr1); //運行結果:[[Ljava.lang.String;@15db9742
因為完整定義了String數組,故分配了空間,arr1指向arr1[0][0]的地址(整個數組的首地址)
兩個[[表示里面有二維數組,java.lang.String;是包名
例3:
float arr1[][] = new float [3][5]; System.out.println(arr1[0]); //結果:[F@15db9742
外層元素初始化值為:地址值
內層元素初始化值為:與一維數組初始化情況相同
一維數組初始化:
1.數組元素是整形int long short : 0
2.數組元素是浮點型float double : 0.0
3.數組元素是boolean型:false
4.數組元素是引用類型 : null
5.數組元素是char型 :0 或 '\u0000' 而非‘0’
數字0,而不是字符0,對應的ASCII碼不一樣
'\u0000'是Unicode碼第0000號位,是一個空格符,但是不是鍵盤上的空格
驗證如下:
經典例題:
解:b e可以,acdf都不行
以上就是關于“Java數組正確的寫法是什么”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。