Java中的數組

1? ? ? 數組No11

數組:存放一組相同類型數據的數據結構

數組本身是引用數據類型,數組中的元素可以是基本數據類型,也可以是引用數據類型

Java中的數組以對象的形式存在,或者說數組本身是引用數據類型,數組中的元素(數組中的每一個數據)類型可以是基本數據類型,也可以是引用數據類型

1.1????聲明

如何使用:

1.聲明:

元素類型[]引用名;或(引用聲明,并未產生數組,等價)

元素類型引用名[];

元素類型變量名[10];不合法,不能在聲明時指定數組長度

(因為引用中只是存放了對象的首地址,不可能存放長度信息)

1.2????創建

2.創建:

數組的動態初始化:

new元素類型[數組長度];(創建數組對象時會為每個元素開辟空間,并且賦以初值,

int 0,double 0.0,? float0.0F,??? short? 0 ,??long? 0L??? Boolean false,

char 0,引用類型null)

(2)數組的靜態初始化,聲明、創建、初始化在一句語句中完成

元素類型【】引用名= {值1,值2,值3………值n};

這種方式同時完成創建和初始化,創建的數組的長度就是大括號中的值得個數,

每一個值之間用逗號,分隔,每個元素的值就是大括號中的值

《注意:靜態初始化聲明必須和初始化寫在一句語句中,否則會出錯?!?/p>

創建指定長度,指定元素類型的數組,創建好了的數組長度不能改變,可通過數組對象的length屬性來獲得長度,這種方式創建的數組,其中的元素的值為默認值(如:int為0,double為0.0,引用類型為null)

數組的靜態初始化:

元素類型[] 引用={元素1,元素2,元素3...};

雖然沒有new關鍵字,但是創建了一個數組對象;創建后自動初始化為{}中的值;數組長度為大括號內元素的個數

元素為引用數據類型的數組每個元素都是引用

1.3????訪問

3.訪問:

數組引用名[數字下標](下標范圍從0到length-1,超出范圍,會報越界異常<會報數組指針越界異常:java.lang.ArrayIndexOutOfBoundsException>)

可以通過這種方式訪問打印,也可以進行對元素的初始化

訪問數組可以對元素進行賦值:數組引用名【數組下標】=元素值

數組的訪問和賦值可以用到循環賦值

數組的長度可以用其length屬性來動態獲得

數組的長度在數組創建后不能更改,如果實在需要一個長度不同的數組,

只能再創建一個

1.4????排序

排序(升序:隨著下標增加,元素越來越大;降序,越來越?。?/p>

1.冒泡排序

(排序,將原來沒有順序的雜亂數組,變成從小到大(升序)或從大到小(降序)的順序。)

《升序:將相鄰的元素進行比較,如果左邊的大,則將它們互換位置,如此不斷循環向右判斷,直到最大的數字冒到最右邊。》

2.??????選擇排序

3.??????插入排序

【實際開發中,使用Arrays.sort(…..)進行排序】

查找:告訴你某個值,在數組中查找出這個值對應的下標

查找:在數組中根據值查找元素,返回找到的元素的下標,如果一個都不符合返回-1.

1、順序查找

從頭到尾遍歷數組,如果符合這個值就返回下標,如果一個都不符合返回-1.

2、二分法查找(必須是排過序的數據)

找到數組中間位置的元素和目標值比較,如果目標值大,就扔掉小的那就扔掉小的那一半數據(中間位置左邊的),如果目標值小,就扔掉大的那一半(中間位置右邊的);接下來對以上操作進行循環執行,直到中間位置元素等于目標值,就將其下標返回。

【】可變長數組

元素類型………引用名

《表示在方法的形參中聲明一個可變長的數組,實參是用逗號隔開的一個單個元素(元素類型是形參數組的元素類型,),而是這個可變長數組形參使用時還是將其當作數組用》

main方法的參數

在應用程序啟動時可以傳入參數,這些參數會自動轉換為字符串數組,

我們可以在main方法中通過main方法的形參數組訪問這些參數

數組的拷貝

【用=號進行數組拷貝并不是真正的拷貝,只是將兩個引用指向同一個對象

2??????二維數組和異常機制N12

2.1????二維數組的使用

二維數組:數組中的元素也是數組

1.聲明:

元素類型[][] 引用名; 或

元素類型 引用名[][];

在聲明時不能在中括號中指定長度

2.初始化:

①靜態初始化:

元素類型[][]引用名={{元素1,元素2,元素3...},{...},{...}...};

(每個子數組的元素可以各不一樣)

靜態初始化必須和聲明在同一語句中

②動態初始化:

(1)new元素類型[長度1][長度2];

【長度1:表示這個二維數組中有幾個子數組

長度2:表示每個子數組中有幾個元素(這樣的話每個子數組長度一樣)

(這樣初始化出的每個元素的值為類型對應的默認值)】

New元素類型[長度1][]

長度1表示

長度2沒有寫,表示這幾個子數組并未創建出來

(注意:不能寫成new[] [2])

2.2????二維數組的拷貝

二維數組的拷貝:

System.arraycopy是淺克隆,淺拷貝

深度克隆、深拷貝:將數組中的每個元素進行逐一拷貝。

長度1表示子數組個數,可以簡單認為是行數,長度2表示每個子數組的長度,可以簡單認為是列數——————用這種方式初始化每個子數組的長度都一樣

(2)new 元素類型[長度1][]

長度1表示子數組個數,或者行數;長度2不寫(不能只寫長度2,不寫長度1)

必須要手動創建各個子數組對象,并將各元素引用分別指向它們

每個子數組的長度可以不一樣

3.訪問:

引用名[下標1][下標2]表示二維數組的下標1的子數組的下標2的元素,如arr[0][1]就是第一個子數組的第二個元素

引用名[下標1]表示二維數組的下標為1的元素、子數組的對象

可以通過循環訪問二維數組中的所有元素

2.3????異常機制

Throwale(是Java中所有的異常、錯誤的父類,直接子類有:Error、Exception)

異常Exception(廣義、體系)

Throwable可拋的,是所有異常和錯誤的父類

Error嚴重的問題,不需要程序去處理(錯誤)

Exception(狹義)是Throwable的子類,我們的應用程序需要去處理可能需要程序去處理

RuntimeException運行時異常,它和它的子類都是《非受檢異常:unchecked exception》,它以及它的子類異常可以通過編寫代碼時嚴密的邏輯避免掉,不一定要通過要通過異常處理機制去處理

非受檢異常:可以不對其進行異常處理,通過嚴謹的編碼邏輯就可以避免的異常

如:ArrayIndexOutofBoundsException數組指針越界、NullPointerException:空指針、ClassCastException:類型轉換、AarithmaticException:數學...:

受檢異常:只要是Exception的子類但不是RuntimeException的子類《支系》,都是受檢異常,受檢異常必須要進行異常處理<受檢異常只能用異常處理機制來處理,否則編譯不能通過>

如:FileFoundException、IOException、MalformedURLException、ClassNotFoundException...

【受檢就是一定要檢查要處理異常處理,非受檢就是不一定要檢查,這是辨別受檢還是非受檢的最直接途徑】

異常處理:try??? catch?finally

如何處理異常:try,catch,finally

try:嘗試運行可能出現異常的代碼

catch:捕捉某一類型的異常對其進行處理

try{

代碼1

}catch(異常類型異常引用名){??????? //catch片段可以有多個

代碼2

}finally{

代碼3

}

【嘗試運行語句1,如果語句1執行中鋪捉了catch小括號中所聲明的類型的異常,

那么就中斷try中語句的執行,而去執行語句2】

注意:

1:catch小括號中的異常類型可以是鋪捉到的異常類型的父類

2:try后可跟多個catch

3:多個catch層級處理,異常層級要從想到大進行處理

Finally最終

Try{

語句1

}catch(異常類型引用){

語句2

}finally{

語句3

}? //無論任何情況,語句3都會執行,一般在finally中進行釋放資源的操作,因為finally

可以保證執行。

throws:將方法定義中,將方法中產生的異常拋給方法的調用者去解決(對外拋出)

【[修飾符]返回類型方法名(參數列表)? throws異常類型{

}】

throw:產生一個(創建好了的)異常

異常可以自定義,定義一個類繼承Exception(受檢異常)、RuntimeException(非受檢異常)

代碼1是要嘗試運行的可能出現異常的代碼

代碼2是捕捉到某種類型(小括號里的類型)異常要執行的處理邏輯

代碼3是無論任何情況都會被最終執行的代碼,用于收尾工作

1.catch()的異常類型可以是實際異常類型的父類

2.一個try可以對應多個并列的catch,表示出現某種類型異常要進行的對應的異常處理

3.如果多個catch中的異常類型有繼承關系,那么父類必須寫在后面

4.異常出現后同一層級的代碼不會被運行

5.即使遇到不能處理的異常,finally中的代碼也會被執行

throws:將方法或構造方法出現的異常向上拋到調用者那里,讓它去處理

throw:產生異常的源頭(和創建異常(newException())不一樣,throw是產生一個創建好了的異常,讓其出現在運行的程序中)

2.4????代碼片段總結

數組元素深度克隆、拷貝(循環拷貝數組中的每個元素)

1:【

int[]array={1,2,5,25,4,5};

int[]array2=newint[array.length];//創建一個相同長度的數組

for(inti=0;i

//將數組的每個元素賦值為舊數組對應的值

array2[i] =array[i];

}

array[0]=458;

2:【

int[]array={1,2,5,25,4,5};

int[]array2=newint[array.length];

//參數說明:

//一:原數組

//三:目標數組

//2:原數組起始位置4:目標數組起始位置

//拷貝的長度

System.arraycopy(array, 0,array2, 0,array.length);

array[0]=458;

3:二維數組拷貝

int[][]array={{1,2,3},{4,5,6}};

int[][]array2=newint[array.length][array[0].length];

//??? System.arraycopy(array, 0, array2, 0, array.length);

for(inti=0;i

System.arraycopy(array[i], 0,array2[i], 0,array[i].length);

}

array[0][0] = 7;

4:可變長數組

publicstaticvoidmain(String[]args) {

//TODOAuto-generatedmethod stub

int[]array={4,5,8,7,5,4,4,4,4,1,5,4};//可任意變

test(array);

}

//這個方法的形參就是一個可變長數組

publicstatic voidtest(int... arr){

System.out.println("arr的長度是:"+arr.length);

for(inti=0;i

System.out.println(i);

}

}

動態創建數組:

1:【

int[][] array = new int[3][4];

2:【

int[][]array=newint[4][];

intni=1;

intk=1;

for(inti=0;i

//每次都手動創建長度為4的子數組對象,并用二維數組的元素去指向

array[i] =newint[ni];

ni++;

}

異常處理機制

1:【

publicclassTestExample {

publicstaticvoidmain(String[]args) {

county();

}

publicstaticvoidcounty(){

try{

town();

}catch(Exceptione){

System.out.println("給錢");

}

}

publicstaticvoidtown()throwsException{

village();

}

publicstaticvoidvillage()throwsException{

thrownewException();

}

}

2:【

publicclassTestThrow2 {

publicstaticvoidmain(String[]args) {

try{

test();//調用者遇到異常則進行trycatch處理

}catch(Exceptione){

e.printStackTrace();

}

}

//讓test的調用者處理,向上拋出

publicstaticvoidtest()throwsException{

//產生一個異常

thrownewException();

}

}

3:【

publicclassIllegalArrayLengthExceptionextendsRuntimeException {

publicIllegalArrayLengthException(Stringmsg){

super(msg);

}

}

publicstaticvoidmain(String[]args) {

int[]array= {};

System.out.println(getMin(array));

}

publicstaticintgetMin(int[]array)throwsIllegalArrayLengthException{

if(array.length== 0){

thrownewIllegalArrayLengthException(

"數組長度不能為0");

}

intminIndex= 0;

for(inti=0;i

if(array[i]

minIndex=i;

}

}

returnarray[minIndex];

}

4:自定義異常與綜合應用

publicclassViolentExceptionextendsException {

privateStringname;

privateStringaddress;

publicViolentException(Stringmessage){

super(message);

}

publicString getName() {

returnname;

}

publicvoidsetName(Stringname) {

this.name=name;

}

publicString getAddress() {

returnaddress;

}

publicvoidsetAddress(Stringaddress) {

this.address=address;

}

}

publicclassTestViolent {

publicstaticvoidmain(String[]args) {

county();

}

publicstaticvoidcounty(){

try{

town();

}catch(ViolentExceptione){

System.out.println("打聽名字:"+e.getName());

System.out.println("打聽地址:"+e.getAddress());

System.out.println("給錢");

}

}

publicstaticvoidtown()throwsViolentException{

village();

}

publicstaticvoidvillage()throwsViolentException{

ViolentExceptione=newViolentException("暴力抗拆");

e.setName("張小龍");

e.setAddress("北濱");

throwe;

}

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,923評論 6 535
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,740評論 3 420
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,856評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,175評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,931評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,321評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,383評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,533評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,082評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,891評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,067評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,618評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,319評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,732評論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,987評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,794評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,076評論 2 375

推薦閱讀更多精彩內容

  • 數組是由同一類型對象護著基本數據組成。 數組是對象,先定義數組名字,用動態的方式分配數組空間,再初始化的。 每個數...
    掠光者閱讀 666評論 0 1
  • java中的數組 語法: 注意: 數組相當于一個大的容器,里面按順序存放了很多相同類型的數據元素; 想要獲取數組中...
    _信仰zmh閱讀 622評論 0 1
  • 國家電網公司企業標準(Q/GDW)- 面向對象的用電信息數據交換協議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,058評論 6 13
  • 一、基本數據類型 注釋 單行注釋:// 區域注釋:/* */ 文檔注釋:/** */ 數值 對于byte類型而言...
    龍貓小爺閱讀 4,284評論 0 16
  • 昨日,7月份自考結束。 昨日,體能訓練課第25節課結束。 今日,22天第八期早起訓練營結束。 今日,自控力冥想訓練...
    D018李靜閱讀 139評論 7 9