Java基礎之—(方法、陣列)
目錄
陣列作為函式的返回值 使用 Arrays 類操作 Java 中的陣列 Java 中的二維陣列
什麼是Java方法
Java方法是語句的集合,他們在一起執行一個功能。
- 方法是解決一類問題的步驟的有序組合
- 方法包含於類或物件中
- 方法在程式中被建立,在其他地方被引用
方法的優點是什麼
- 使程式變得簡短而清晰
- 有利於程式維護
- 可以提高程式開發效率
- 提高程式碼的重用性
方法的定義
一般情況下,定義一個方法包含以下語法:
修飾符 返回值型別 方法名(引數型別 引數名){
...
方法體
...
return 返回值;
}
方法包含一個方法頭和一個方法體。下面是一個方法的所有部分:
- 修飾符:修飾符,這是可選的,告訴編譯器如何呼叫該方法。定義了該方法的訪問型別。
- 返回值型別 :方法可能會返回值。returnValueType 是方法返回值的資料型別。有些方法執行所需的操作,但沒有返回值。在這種情況下,returnValueType 是關鍵字void。
- 方法名:是方法的實際名稱。方法名和引數表共同構成方法簽名。
- 引數型別:引數像是一個佔位符。當方法被呼叫時,傳遞值給引數。這個值被稱為實參或變數。引數列表是指方法的引數型別、順序和引數的個數。引數是可選的,方法可以不包含任何引數。
- 方法體:方法體包含具體的語句,定義該方法的功能。
注意: 在一些其它語言中方法指過程和函式。一個返回非void型別返回值的方法稱為函式;一個返回void型別返回值的方法叫做過程。
方法呼叫
Java 支援兩種呼叫方法的方式,根據方法是否返回值來選擇。
當程式呼叫一個方法時,程式的控制權交給了被呼叫的方法。當被呼叫方法的返回語句執行或者到達方法體閉括號時候交還控制權給程式。
當方法返回一個值的時候,方法呼叫通常被當做一個值。
如果方法返回值是void,方法呼叫一定是一條語句。
通過值傳遞引數
呼叫一個方法時候需要提供引數,你必須按照引數列表指定的順序提供。
方法的過載
就是說一個類的兩個方法擁有相同的名字,但是有不同的引數列表。
Java編譯器根據方法簽名判斷哪個方法應該被呼叫。
方法過載可以讓程式更清晰易讀。執行密切相關任務的方法應該使用相同的名字。
過載的方法必須擁有不同的引數列表。你不能僅僅依據修飾符或者返回型別的不同來過載方法。
變數作用域
變數的範圍是程式中該變數可以被引用的部分。
方法內定義的變數被稱為區域性變數。
區域性變數的作用範圍從宣告開始,直到包含它的塊結束。
區域性變數必須宣告才可以使用。
方法的引數範圍涵蓋整個方法。引數實際上是一個區域性變數。
for迴圈的初始化部分宣告的變數,其作用範圍在整個迴圈。
但迴圈體內宣告的變數其適用範圍是從它宣告到迴圈體結束。它包含如下所示的變數宣告:
你可以在一個方法裡,不同的非巢狀塊中多次宣告一個具有相同的名稱區域性變數,但你不能在巢狀塊內兩次宣告區域性變數。
構造方法
當一個物件被建立時候,構造方法用來初始化該物件。構造方法和它所在類的名字相同,但構造方法沒有返回值。
通常會使用構造方法給一個類的例項變數賦初值,或者執行其它必要的步驟來建立一個完整的物件。
不管你是否自定義構造方法,所有的類都有構造方法,因為Java自動提供了一個預設構造方法,它把所有成員初始化為0。
一旦你定義了自己的構造方法,預設構造方法就會失效。
Java 陣列
什麼是陣列
陣列可以理解為是一個巨大的“盒子”,裡面可以按順序存放多個型別相同的資料,比如可以定義 int 型的陣列 scores 儲存 4 名學生的成績,int[] scores={76,93,87,55};陣列中的元素下標從0開始。
Java 語言中提供的陣列是用來儲存固定大小的同類型元素。
你可以宣告一個數組變數,如 numbers[100] 來代替直接宣告 100 個獨立變數 number0,number1,....,number99。
首先必須宣告陣列變數,才能在程式中使用陣列。下面是宣告陣列變數的語法:
dataType[] arrayRefVar; // 首選的方法
或
dataType arrayRefVar[]; // 效果相同,但不是首選方法
注意: 建議使用 dataType[] arrayRefVar 的宣告風格宣告陣列變數。 dataType arrayRefVar[] 風格是來自 C/C++ 語言 ,在Java中採用是為了讓 C/C++ 程式設計師能夠快速理解java語言。
建立陣列
宣告陣列
語法: 資料型別[] 陣列名;
或者 資料型別 陣列名[];
其中陣列名是任意合法的變數名
分配空間
簡單地說,就是指定陣列中最多可儲存多少個元素。
語法: 陣列名 = new 資料型別 [ 陣列長度 ];
Java語言使用new操作符來建立陣列,語法如下:
arrayRefVar = new dataType[arraySize];
上面的語法語句做了兩件事:
- 一、使用 dataType[arraySize] 建立了一個數組。
- 二、把新建立的陣列的引用賦值給變數 arrayRefVar。
陣列變數的宣告,和建立陣列可以用一條語句完成,如下所示:
dataType[] arrayRefVar = new dataType[arraySize];
其中,陣列長度(length)就是陣列中能存放元素的個數。
另外,你還可以使用如下的方式建立陣列。
dataType[] arrayRefVar = {value0, value1, ..., valuek};
上下兩個陣列等效。
陣列的元素是通過索引訪問的。陣列索引從 0 開始,所以索引值從 0 到 arrayRefVar.length-1。陣列的長度:arrayRefVar.length
賦值
分配空間後就可以向陣列中放資料了,陣列中元素都是通過下標來訪問的。
使用迴圈操作 Java 中的陣列
陣列名.length 用於獲取陣列的長度
注意:
(1)、 陣列下標從 0 開始。因此 scores[3] ,表示陣列中的第 4 個元素,而並非第 3 個元素
(2)、 陣列下標的範圍是 0 至 陣列長度-1 ,如果越界訪問,就會報錯。
下面的圖片描繪了陣列 myList。這裡 myList 數組裡有 10 個 double 元素,它的下標從 0 到 9。
陣列的元素型別和陣列的大小都是確定的,所以當處理陣列元素時候,我們通常使用基本迴圈或者 foreach 迴圈。
示例:
普通for迴圈:
public class TestArray {
public static void main(String[] args) {
double[] myList = {1.9, 2.9, 3.4, 3.5};
// 列印所有陣列元素
for (int i = 0; i < myList.length; i++) {
System.out.println(myList[i] + " ");
}
// 計算所有元素的總和
double total = 0;
for (int i = 0; i < myList.length; i++) {
total += myList[i];
}
System.out.println("Total is " + total);
// 查詢最大元素
double max = myList[0];
for (int i = 1; i < myList.length; i++) {
if (myList[i] > max) max = myList[i];
}
System.out.println("Max is " + max);
}
}
foreach迴圈:
public class TestArray {
public static void main(String[] args) {
double[] myList = {1.9, 2.9, 3.4, 3.5};
// 列印所有陣列元素
for (double element: myList) {
System.out.println(element);
}
}
}
陣列作為函式的引數
陣列可以作為引數傳遞給方法。
例如,下面的例子就是一個列印 int 陣列中元素的方法:
public static void printArray(int[] array) {
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
}
下面例子呼叫 printArray 方法打印出 3,1,2,6,4 和 2:
printArray(new int[]{3, 1, 2, 6, 4, 2});
陣列作為函式的返回值
public static int[] reverse(int[] list) {
//將陣列list的數值從頭賦給result陣列(倒著)
int[] result = new int[list.length]; //定義陣列長度一致
for (int i = 0, j = result.length - 1; i < list.length; i++, j--) {
result[j] = list[i]; //等同於result[result.length-1-i]=list[i];
}
return result;
}
使用 Arrays 類操作 Java 中的陣列
Arrays 類是 Java 中提供的一個工具類,在 java.util 包中。該類中包含了一些方法用來直接運算元組,比如可直接實現陣列的排序、搜尋等。
import java.util.Arrays;
Arrays 中常用的方法:
(1)、 排序 Arrays.sort(陣列名)
可以使用 sort( ) 方法實現對陣列的排序,只要將陣列名放在 sort( ) 方法的括號中,就可以完成對該陣列的排序(按升序排列)。
(2)、轉換為字串 Arrays.toString(陣列名)
可以使用 toString( ) 方法將一個數組轉換成字串,該方法按順序把多個數組元素連線在一起,多個元素之間使用逗號和空格隔開。
Arrays類:
具體說明請查看下錶:
序號 | 方法和說明 |
---|---|
1 | public static int binarySearch(Object[] a, Object key) 用二分查詢演算法在給定陣列中搜索給定值的物件(Byte,Int,double等)。陣列在呼叫前必須排序好的。如果查詢值包含在陣列中,則返回搜尋鍵的索引;否則返回 (-(插入點) - 1)。 |
2 | public static boolean equals(long[] a, long[] a2) 如果兩個指定的 long 型陣列彼此相等,則返回 true。如果兩個陣列包含相同數量的元素,並且兩個陣列中的所有相應元素對都是相等的,則認為這兩個陣列是相等的。換句話說,如果兩個陣列以相同順序包含相同的元素,則兩個陣列是相等的。同樣的方法適用於所有的其他基本資料型別(Byte,short,Int等)。 |
3 | public static void fill(int[] a, int val) 將指定的 int 值分配給指定 int 型陣列指定範圍中的每個元素。同樣的方法適用於所有的其他基本資料型別(Byte,short,Int等)。 |
4 | public static void sort(Object[] a) 對指定物件陣列根據其元素的自然順序進行升序排列。同樣的方法適用於所有的其他基本資料型別(Byte,short,Int等)。 |
Java 中的二維陣列
所謂二維陣列,可以簡單的理解為是一種“特殊”的一維陣列,它的每個陣列空間中儲存的是一個一維陣列。
那麼如何使用二維陣列呢,步驟如下:
(1)、 宣告陣列並分配空間
資料型別[ ][ ] 陣列名=new 資料型別[行的個數][列的個數];
或者 資料型別[ ][ ] 陣列名;
陣列名=new 資料型別[行的個數][列的個數];
int [ ][ ] scores; //定義二維陣列
scores=new int[5][50]; //分配記憶體空間
//或者
int [ ][ ] scores = new int[5][50];
(2)、賦值
二維陣列的賦值和一維陣列類似,可以通過下標來逐個賦值,注意索引從 0 開始。
陣列名[行索引][列索引]=值;
也可以在宣告時為其賦值
資料型別[ ][ ] 陣列名={{值1,值2...},{值11,值12...},{值21,值22...}};
(3)、處理陣列
二維陣列的訪問和輸出同一維陣列一樣,只是多了一個下標而已。在迴圈輸出時,需要裡面
再內嵌一個迴圈,即使用二重迴圈來輸出二維陣列中的每一個元素。
在定義二維陣列時也可以只指定行的個數,然後再為每一行分別指定列的個數。如果每行的列數不同,則建立的是不規則的二維陣列。
學習參考:http://www.runoob.com/java/java-array.html