歡迎關(guān)注個人主頁:逸狼
創(chuàng)造不易,可以點點贊嗎~
如有錯誤,歡迎指出~
目錄
一維數(shù)組
基本語法
初始化
遍歷和打印
數(shù)組是引用型變量
基本類型變量與引用類型變量的區(qū)別
null
數(shù)組傳參和返回
總結(jié)
二維數(shù)組
基本語法
初始化
遍歷和打印
一維數(shù)組
數(shù)組:可以看成是相同類型元素的一個集合。
基本語法
T[] 數(shù)組名 = new T[N];?
- T:表示數(shù)組中存放元素的類型
- T[]:表示數(shù)組的類型
- N:表示數(shù)組的長度
初始化
int[] array={1,2,3,4,5};
int []arr1=new int[]{1,3,4};
int []aa=new int[19];
遍歷和打印
- 數(shù)組是一段連續(xù)的內(nèi)存空間,因此支持隨機訪問,即通過下標訪問快速訪問數(shù)組中任意位置的元素 ?
- 下標從0開始,介于[0, N)之間不包含N,N為元素個數(shù),不能越界,否則會報出下標越界異常。
三種方法
public static void main(String[] args) {
int[] array={1,2,3,4,5};
System.out.println(array.length);//求數(shù)組長度
System.out.println(array[2]);//通過下標訪問數(shù)組元素
//遍歷打印數(shù)組
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
//for each循環(huán) 遍歷數(shù)組,把每一個值放入x中,獲取不到下標
for (int x:array) {
System.out.print(x+" ");
}
//借助Java的原生的方法
String ret= Arrays.toString(array);//將數(shù)組元素以字符串的形式輸出
System.out.println(ret);
數(shù)組是引用型變量
引用變量并不直接存儲對象本身,可以簡單理解成存儲的是對象在堆中空間的起始地址。通過該 地址,引用變量便可以去操作對象。
JVM內(nèi)存分布
- 程序計數(shù)器 (PC Register): 只是一個很小的空間, 保存下一條執(zhí)行的指令的地址
- 虛擬機棧(JVM Stack): 與方法調(diào)用相關(guān)的一些信息,每個方法在執(zhí)行時,都會先創(chuàng)建一個棧幀,棧幀中包含 有:局部變量表、操作數(shù)棧、動態(tài)鏈接、返回地址以及其他的一些信息,保存的都是與方法執(zhí)行時相關(guān)的一 些信息。比如:局部變量。當(dāng)方法運行結(jié)束后,棧幀就被銷毀了,即棧幀中保存的數(shù)據(jù)也被銷毀了。
- 本地方法棧(Native Method Stack): 本地方法棧與虛擬機棧的作用類似. 只不過保存的內(nèi)容是Native方法的局 部變量. 在有些版本的 JVM 實現(xiàn)中(例如HotSpot), 本地方法棧和虛擬機棧是一起的
- 堆(Heap): JVM所管理的最大內(nèi)存區(qū)域. 使用 new 創(chuàng)建的對象都是在堆上保存 ,堆是隨著程序開始運行時而創(chuàng)建,隨著程序的退出而銷毀,堆中的數(shù)據(jù)只要還有在使用,就不會被銷 毀。
- 方法區(qū)(Method Area): 用于存儲已被虛擬機加載的類信息、常量、靜態(tài)變量、即時編譯器編譯后的代碼等數(shù) 據(jù). 方法編譯出的的字節(jié)碼就是保存在這個區(qū)域 現(xiàn)在我們只簡單關(guān)心堆 和 虛擬機棧這兩塊空間
基本類型變量與引用類型變量的區(qū)別
- 基本數(shù)據(jù)類型創(chuàng)建的變量,稱為基本變量,該變量空間中直接存放的是其所對應(yīng)的值;
- 而引用數(shù)據(jù)類型創(chuàng)建的變量,一般稱為對象的引用,其空間中存儲的是對象所在空間的地址。
null
可以將數(shù)組置為null
int[] arr = null;
null 的作用類似于 C 語言中的 NULL (空指針), 都是表示一個無效的內(nèi)存位置. 因此不能對這個內(nèi)存進行任何讀寫操 作. 一旦嘗試讀寫, 就會拋出 NullPointerException.
注意: Java 中并沒有約定 null 和 0 號地址的內(nèi)存有任何關(guān)聯(lián)
數(shù)組傳參和返回
本質(zhì)上還是傳值調(diào)用
例如想要實現(xiàn)將原數(shù)組的每一位元素都擴大兩倍
有兩種實現(xiàn)方法
//無返回值
public static void func(int[]array1){
for (int i = 0; i < array1.length; i++) {
array1[i]= array1[i]*2;//將每個數(shù)字擴大2倍
}
}
//數(shù)組作為返回值
public static int[] func2(int[]array1){
int[]tmp=new int[array1.length];
for (int i = 0; i < array1.length; i++) {
tmp[i]=array1[i]*2;
}
return tmp;//Java中數(shù)組可以是返回值
}
public static void main(String[] args) {
int[] array={1,2,4,5};
int[] retArray=func2(array);//本質(zhì)上還是傳值調(diào)用
String ret=Arrays.toString(retArray);
System.out.println(ret);
}
總結(jié)
所謂的 "引用" 本質(zhì)上只是存了一個地址. Java 將數(shù)組設(shè)定成引用類型, 這樣的話后續(xù)進行數(shù)組參數(shù)傳參, 其實 只是將數(shù)組的地址傳入到函數(shù)形參中. 這樣可以避免對整個數(shù)組的拷貝(數(shù)組可能比較長, 那么拷貝開銷就會很大).
二維數(shù)組
基本語法
數(shù)據(jù)類型[][] 數(shù)組名稱 = new 數(shù)據(jù)類型 [行數(shù)][列數(shù)] { 初始化數(shù)據(jù) };
初始化
有三種
//二維數(shù)組
int[][]array={{1,3,4,5},{6,6,4,7}};//是第二種的簡化,常用
int[][]array2=new int[][]{{1,3,4,5},{6,6,4,7}};
int[][]array3=new int[2][4];//全部初始化為0
遍歷和打印
有兩種
public static void main(String[] args) {
//二維數(shù)組
int[][]array={{1,3,4,5},{6,6,4,7}};
//第一種,要數(shù)行和列的個數(shù)
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 4; j++) {
System.out.print(array[i][j]+" ");
}
System.out.println();
}
System.out.println("#########");
//另一種不用數(shù)二維數(shù)組的個數(shù)的方法
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j]+" ");
}
System.out.println();
}
}
結(jié)果文章來源:http://www.zghlxwxcb.cn/news/detail-844866.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-844866.html
到了這里,關(guān)于【JavaSE】一維數(shù)組和二維數(shù)組詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!