數組的基礎理解
阿新 • • 發佈:2018-11-17
ofb ima 觀察 沒有 bound 下拉 java 必須 結合 數組:
例如:
int [] a; 定義了一個int類型的數組變量a;
int a [];定義了一個int類型 變量a的數組;
這兩個方式定義:雖然寫法不同,讀法不同但是表達的效果是一樣的,都是在定義一個數組;
面試過程中如果沒有說明二維數組,都用如上的一維數組去做;
4.數組的初始化
1)動態初始化:給數組指定長度,數組中的元素值由系統默認給定;
2)靜態初始化:給定數組中元素的值,數組的長度有系統給定;
1.概念,什麽數數組?
數組是存儲多個變量(元素)的東西(容器);
這多個變量的數據類型要一致;
2.java的內存分配圖
java為了提供程序的執行效率,將內存分為五個部分
A.棧內存:可以存儲局部變量
在方法定義中(定義的局部變量)或者在方法聲明上(形參)都是局部變量
當方法或者代碼執行完後,局部變量就會及時從內存中釋放掉;`
B.堆內存:
new出來的東西在堆內存,堆內存中創建的數組對象會在使用後,由垃圾回收期釋放,但不是用完立即釋放,而是等垃圾回收器空閑才進行釋放
C.方法區
面向對象部分講
D本地方法區(和系統有關系)
E寄存器(和CPU有關)
3.數組的定義:
數據類型[] 數組名;
數據類型 數組名[];
int [] a; 定義了一個int類型的數組變量a;
int a [];定義了一個int類型 變量a的數組;
這兩個方式定義:雖然寫法不同,讀法不同但是表達的效果是一樣的,都是在定義一個數組;
面試過程中如果沒有說明二維數組,都用如上的一維數組去做;
4.數組的初始化
1)動態初始化:給數組指定長度,數組中的元素值由系統默認給定;
2)靜態初始化:給定數組中元素的值,數組的長度有系統給定;
動態初始化: 數據類型[]數組名 = new 數據類型[數組長度] 例如: int [] arr = new int[3]; 沒有被初始化的數組是沒辦法被使用的,不能直接輸出一個arr,必須有new那些東西; 此時打印輸出arr就是一個地址值, 獲取數組中的元素:通過數組名稱獲取 格式: 數組名稱[索引值],數組的索引值從零開始,最大的索引是數組長度-1; 輸出arr[0] arr[1] 結果都是自動給定的0; 靜態初始化: 原始格式: 數據類型[] 數組名稱 = new 數據類型[]{元素1.2.3....} 簡寫方式: 數據類型[]數組名稱 = {元素1.2.3.........} 舉例: int [] arr = new int[]{1,2,3} int [] arr = {1,2,3} 如果定義是這樣定義: int[] arr = new int[3]{1,2,3} 這樣便是錯誤的,因為這樣是動靜結合,不可使用;
-
Throwable類是java語言中所有錯誤或者異常的超類;
而Throwable的已知子類便是;
Error:錯誤(嚴重錯誤);
Exception:異常 分為編譯時期,運行時期;
數組中出現的兩個異常:java.lang.ArrayIndexOutOfBoundsException: 數組角標越界
出現的原因是訪問了數組中不存在的索引值;
解決方案:觀察數組中索引值到多少;如果int [] arr =null; 輸出arr[0]; 此時輸出異常:NullPointerException:空指針異常;(實際開發異常最多的) 出現原因是對象為空,而開發者還要去使用對象,那麽就會出現問題; 解決方案:判斷一下if(arr!=null){再輸出對象},這樣即可解決; OOM異常:OutOfMemory:內存溢出; 使用app時,比如這個app攜帶大量的圖片,一直再往下刷新,有時app退出, 你下拉的速度遠不及加載的速度,加載要求釋放掉,你下拉太慢, 已經釋放掉了,嬌內存溢出; 解決方案: 使用第三方的軟件,比如ImageLoader等;
6.數組中的length;
數組中的length屬性,arr.length;可以在靜態初始化後直接算出裏面的元素量;
同理 arr.length-1;可以算出索引的大小;
區分:
還有一個length()方法,是字符串中運用的,用來計算字符串的長度;
數組的基礎理解