本篇文章為大家帶來了關於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;
# 預設值問題:動態[i][j]有預設值,靜態{}沒有預設值(結尾詳解)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 [][]{};写法
不过我个人不习惯。。。
報錯誤案例:
深入記憶體理解:(最後詳解)# 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] ; 地# [5] {1,2,3,4,5} ; //動態不能帶{ }
#陣列一旦確定(宣告初始化),長度就固定了,不能改變#數組的記憶體分配是連續的,系統要為數組分配一個固定的空間,如果100個空間以後被其他內容佔用內存,那麼數組就只能用到前99個空間,如果長度可以改變,那麼arr [100]就會更改其他內容產生bug
一個例子說明數組長度問題:
二維數組遍歷,兩層for循環:
int arr0 [][] = {{1,2},{3,4},{5,6}};//正确:静态、自动类型推断 int arr1 [][] = new int [3][2]; int arr2 [][] = new int [3][ ];//正确:动态、可省列数[] int arr3 [][][] = new int [3][ ][ ];//正确:动态、可省后两个[]
運行結果:
arr.length是第一個維度長度arr[i].length是第i行的第二個維度長度arr [i][j].length是第i行j列的第三個維度的長度數組記憶體解析:以二維數組為例,分為內層和外層。形如arr[0] arr[1]的是外層,完整表達arr[1][2]的是內層一、對一個外層arr[1]來說,它就是一個一維數組,就會分為「初始化」與「未初始化」的兩種情況:例1: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]....... //都会报错此時只知道外層行數,但內層沒有初始化,沒有分配位址,故結果為null###
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]);报错下标越界 } }###此時內層長度確定,初始化完成,arr1[1]指向一個首位址[I@15db9742######一個[ 表示arr[ 1]的內層為一維數組,I是int的首字母,@後面是地址######例2:###
int arr1[][] = new int [3][]; System.out.println( arr1[1] ); //运行结果:null###因為完整定義了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视频教程》
以上是Java歸納總結之數組詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!