舉例:假如現在有十個人排成一隊【張三,李四,王五……】,這個隊的隊名叫a,然後要求第乙個人從0開始報數【張三報0,李四報1,王五報2……】。現在要求第乙個人出列,但現在還不知道張三的名字,怎麼辦?那麼只能要求a隊0號出列。請問此時誰會出列?很明顯是張三出列。
這對人就形成了類似陣列的結構;其中隊名a就對應陣列名,各個人報的號就對應陣列的下標,而每個人就對應陣列中的元素,人的個數就對應陣列的長度。
在程式設計中,把具有相同型別的若干個變數按有序的形式組合在一起,僅使用乙個變數名來儲存這些元素,用下標(下標從0開始)來對應不同位置的變數,這就是陣列。
宣告語法格式:
方式一、資料型別 變數名 = ;
方式二、資料型別 變數名 = new 資料型別;
方式三、資料型別 變數名 = new 資料型別[長度值];
賦值語法格式:
變數名[下標] = 值;
例項:/*
執行完此句**後,記憶體中存在乙個名字叫i的變數,並且占用3個int型別長度的連續空間(即占用連續12位元組的記憶體空間),並按每個int型別長度(4位元組)為單位自左向右進行編號,編號從0開始。然後將int型別的值1存入編號為0的4個位元組中,2存入編號為1的4個位元組中,3存入編號為2的4個位元組中。並將這12位元組記憶體空間的起始位址複製給變數i
其中int是資料型別,中括號代表陣列,變數名i也可稱為陣列名,{}大括號表示陣列常量(其內部包含陣列元素),其中的資料1,2,3是陣列的三個(長度為3)元素(多個元素之間用英文格式的逗號隔開),對應的編號0、1、2是陣列的下標。
*/int i = ;
//建立乙個長度為5的string型別的陣列;
//此處的new操作是在建立陣列物件,所以後面跟的是中括號和長度:型別[長度]
string str = new string[5];
//為陣列的元素賦值;其中str [0]中的0代表的是下標
str [0] = "abc";
//此處的new操作是建立string物件,所以後面跟小括號,而不是中括號;
//然後將建立的string物件賦值給陣列中下標為1的位置
str [1] = new string("xyz");
//此句會出現錯誤,因為陣列的長度是5,下標是0到4
//此處使用5作為下標,超出了陣列下標的界限
str[5] = "aaa"
注意:方式一只能寫在一條語句中,不能拆成兩條語句;
例如:int i; i = ; //這樣是錯誤的。
方式二new 型別{};的中括號中不能寫長度值,大括號中元素的個數就是長度值
方式三new 型別[3];的中括號中必須寫長度值
另外:宣告陣列變數時可以寫在資料型別後,也可以寫在變數名後,如:int i;
陣列是引用型別,其引用可以指向任何相同型別的陣列物件,但陣列物件一旦建立,其長度無法再改變。而且陣列物件占用的記憶體空間一定是連續的。
使用下標訪問陣列中的資料
語法格式:陣列名[下標]
獲取陣列的長度:陣列名.length;
例項:
package array;
/** * 運算元組類operationarray
* 實現向陣列中新增資料
* 訪問陣列中的資料
* 查詢陣列中的資料
* 修改陣列中的資料
* 向陣列中插入資料
* 刪除陣列中的資料
* @author 學霸聯盟 - 趙燦
*/public class operationarray else if(i == studentnames.length - 1)
} system.out.println("----------- 修改後的資料 -----------");
//將下標為2的「王五」修改為「趙六」
studentnames[2] = "趙六";
//呼叫遍歷陣列的方法,輸出修改後的資料
ergodicarray(studentnames);
system.out.println("----------- 插入後的資料 -----------");
/** 向下標為2的位置重新插入「王五」
* 既然是插入,從下標為2到陣列的結尾的每乙個元素都要向後移動一位
* 然後將下標為2的位置賦值為「王五」
* 所以for迴圈要從陣列中倒數第乙個元素開始訪問,即studentnames.length-1
* 至等於2時結束,並且下標是乙個乙個不斷在減小的
*/for (int i = studentnames.length - 1; i >= 2; i--)
} //呼叫遍歷陣列的方法,輸出修改後的資料
ergodicarray(studentnames);
system.out.println("----------- 刪除後的資料 -----------");
/** 將下標為2的位置上的值刪除,即刪除剛剛插入的「王五」
* 刪除後應該回到插入「王五」之前的狀態
* 恰好和插入相反,刪除是將2位置以後的每個位置的元素往前移動一位
*/for (int i = 2; i < studentnames.length; i++) else
} //呼叫遍歷陣列的方法,輸出修改後的資料
ergodicarray(studentnames);
}/**
* 遍歷陣列的方法;遍歷:就是乙個乙個的訪問
* 其中引數為需要遍歷的陣列
* 由於多處需要用到遍歷輸出陣列中的值,所以將其放到乙個方法
* 這樣在需要使用的位置,呼叫這個方法就可以復用遍歷輸出的**了
*/private static void ergodicarray(string array)
//輸出換行符
system.out.print("\n"); }}
執行結果:
----------- 初始陣列中的值 -----------
張三 李四 王五 null
----------- 查詢資料 -----------
李四所在陣列studentnames中的下標為:1
----------- 修改後的資料 -----------
張三 李四 趙六 null
----------- 插入後的資料 -----------
張三 李四 王五 趙六
----------- 刪除後的資料 -----------
張三 李四 趙六 null
就是一維陣列中的每個元素也是一維陣列,這樣組成的陣列就是二維陣列。
方式一、資料型別 陣列名 = ,,};
方式二、資料型別 陣列名;
陣列名 = new 資料型別,};
和一維陣列一樣,方式一只能寫在一條語句中,不能分成兩條語句編寫;
方式三、資料型別 陣列名 = new 資料型別[外層陣列長度][內層陣列長度];
陣列名[0][0] = 值;
方式四、資料型別 陣列名 = new 資料型別[外層陣列長度];
陣列名[下標] = new 資料型別[長度];
例項:
package array;
/** * twodimensionalarraydemo類:演示二維陣列
* @author 學霸聯盟 - 趙燦
*/public class twodimensionalarraydemo
} }}執行結果:
第1行第1列
第1行第2列
第1行第3列
第2行第1列
第2行第2列
第2行第3列
I學霸官方免費教程三十八 Java基礎教程之異常
程式中不正常的情況分為兩大類 錯誤 error 和異常 exception 錯誤 error 程式本身無法對這種不正常的情況進行處理,將會導致程式崩潰 例如 記憶體耗盡錯誤,jvm崩潰錯誤等 異常 exception 程式可以特殊的 對不正常的情況進行捕獲和處理,程式可以繼續執行 例如 除零異常,空...
I學霸官方免費教程三十九 Java基礎教程之執行緒
建立執行緒的兩種方式 1 實現runnable介面 還可以繼承其他類 2 繼承thread類 使用簡單 方式一 實現runnable介面 package thread 建立myrunnable類,並實現runnable介面 author 學霸聯盟 趙燦 public class myrunnable...
I學霸官方免費教程十二 Java基礎之內部類
在乙個類的內部或方法的內部宣告的類,叫做內部類。語法格式 訪問修飾符 static class 類名 可以簡單的把內部類理解成乙個變數,只不過這個變數的資料型別是class,使用時需要建立物件後再使用。成員內部類 直接宣告在類中的內部類 同成員變數 區域性內部類 生命在方法中的內部類 同區域性變數 ...