方法
1.什麼是方法
Java 中的方法類似於 C 語言中的函數。方法(method)一定是和 類 關聯在一起的。方法存在的意義:
- 是能夠模塊化的組織代碼
- 做到代碼被重複使用,一份代碼可以在多個位置使用
- 讓代碼更好理解更簡單
- 直接調用現有方法開發,不必重複造輪子
Java 中的方法的定義位置,可以放在調用代碼的上面,也可以放在下面。 Java 中也沒有“函數聲明”這樣的說法。
2.方法的定義
- 方法定義時, 參數可以沒有. 每個參數要指定類型
- 方法定義時, 返回值也可以沒有, 如果沒有返回值, 則返回值類型應寫成 void
- 方法定義時的參數稱爲 “形參”, 方法調用時的參數稱爲 “實參”。
- Java 的方法必須寫到類裏面
//方法定義
public static 方法返回值 方法名稱 ([參數類型 形參 ...]) {
方法體代碼;
[return 返回值];
}
3. 形參 和 實參 的關係
C 語言中 形參 是 實參 的一份拷貝
對於 Java 中同樣適用。
Java 是沒有指針的,但是有引用,引用相當於低配指針
Java 中的基本類型(int , float, double) 都不是引用
可以藉助 數組 來完成, Java 中的數組是引用類型
數組是引用類型,此時方法內部對數組的操作是能夠影響到方法外部的。
class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
swap(a, b);
System.out.println("a = " + a + " b = " + b);
}
public static void swap(int x, int y) {
int tmp = x;
x = y;
y = tmp;
}
}
// 運行結果
a = 10, b = 20
原因是剛纔的代碼,沒有完成數據的交換
對於基礎類型來說,形參相當於實參的拷貝,即 傳值調用
4.沒有返回值的方法
方法的返回值是可選的,有些時候可以沒有的。
例:
class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
print(a, b);
}
public static void print(int x, int y) {
System.out.println("x = " + x + " y = " + y);
}
}
5.方法的重載
重載主要有兩種體現形式
- 方法名字相同,參數類型不同
- 方法名字相同,參數個數不同
前提條件,這兩個方法要在同一個類中。
兩個方法是否構成重載和方法的返回值類型無關。
像有些方法,參數不同,但是方法體裏面的執行邏輯是完全一樣的,這時可以使用重載來處理,但是沒必要,我們還有更好的方法,“泛型”
例:
class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
int ret = addInt(a, b);
System.out.println("ret = " + ret);
double a2 = 10.5;
double b2 = 20.5;
double ret2 = addDouble(a2, b2);
System.out.println("ret2 = " + ret2);
}
public static int addInt(int x, int y) {
return x + y;
}
public static double addDouble(double x, double y) {
return x + y;
}
}
6.方法的遞歸
一個方法在執行過程中調用自身, 就稱爲 “遞歸”.
遞歸相當於數學上的 “數學歸納法”, 有一個起始條件, 然後有一個遞推公式。
例如, 我們求 N!
起始條件: N = 1 的時候, N! 爲 1. 這個起始條件相當於遞歸的結束條件. 遞歸公式: 求 N! , 直接不好求, 可以把問題轉換成 N! => N * (N - 1)!
例:
public static void main(String[] args) {
int n = 5;
int ret = factor(n);
System.out.println("ret = " + ret);
}
public static int factor(int n) {
if (n == 1) {
return 1;
}
return n * factor(n - 1); // factor 調用函數自身
}
// 執行結果 ret = 120