Java從入門到“放棄”(精通)之旅🚀——方法的使用⑤
📖引言:
在編程領域,代碼如同精密的齒輪相互咬合驅動程序運轉。隨著項目規模漸長,重復的代碼片段如同冗余的齒輪,不僅增加負重,還易導致故障。
而方法,恰似能將特定功能齒輪組封裝起來的黑匣子。把重復執行的代碼邏輯收納其中,對外僅露出簡潔的調用接口。需要執行相應功能時,只需精準呼喚方法之名,就如同轉動黑匣子外的把手,內部精巧的齒輪組便會有序運轉,高效輸出預期結果。這將復雜的功能模塊化、抽象化,提升代碼的可讀性、可維護性與復用性,此即Java中方法的本質所在。
一、方法基礎:告別"復制粘貼"的苦日子
1. 方法定義:你的第一個代碼模板
Java定義方法的語法:
public static 返回值類型 方法名(參數類型 參數名) {// 方法體(你的騷操作)return 返回值; // 如果有的話
}
舉個栗子🌰:判斷閏年
public static boolean isLeapYear(int year) {return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
關鍵點速記:
public static
:表示公開屬性并且是靜態的- 方法名:建議
動詞+名詞
,比如calculateSum
(千萬別用a1
、test2
這種名字) - 參數:像點奶茶時的選項——要加珍珠嗎?要幾分糖?
2. 方法調用:讓代碼"自己動"
舉個栗子🌰:
當你寫下add(1, 2)
,JVM在幕后做了這些:
- 找到
add
方法地址(找到收藏的奶茶店)- 把
1
和2
傳給方法(提交點單)- 執行方法體(店員做奶茶)
- 返回結果(奶茶送到家)
代碼示例:
public static void main(String[] args) {System.out.println("2+3=" + add(2, 3)); // 輸出:5
}public static int add(int a, int b) {return a + b;
}
二、方法進階:玩轉參數與返回值
1. 形參 vs 實參:分清"菜譜"和"食材"
- 形參:方法定義時的參數(就像菜譜里的"適量")
- 實參:方法調用時傳入的值(就像實際放的鹽)
// 形參:a, b
public static int add(int a, int b) {return a + b;
}public static void main(String[] args) {int x = 2, y = 3;add(x, y); // 實參:x, y
}
2. 值傳遞的陷阱:為什么交換失敗了?
public static void swap(int a, int b) {int temp = a;a = b;b = temp; // 這里交換的只是形參!
}
原因:Java是值傳遞,方法內操作的是參數的拷貝。想真正交換要等學到了數組
3.沒有返回值的方法:void
方法的返回值是可以選擇的,當沒有返回值時,返回值類型必須寫成void!
代碼示例:
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);
}
三、方法重載:Java版的"一詞多義"
1. 為什么需要重載?
想象去奶茶店:
- 你:“要一杯奶茶”
- 店員:“???(冰的熱的?加糖嗎?大杯中杯?)”
代碼版悲劇:
add(1, 2); // OK
add(1.5, 2.5); // 報錯:所需參數是int,卻傳遞double
2. 重載的正確打開方式
規則:方法名相同,參數列表不同(類型、個數、順序)
// 整型加法
public static int add(int a, int b) { return a + b; }// 浮點加法
public static double add(double a, double b) { return a + b; }// 三數相加
public static int add(int a, int b, int c) { return a + b + c; }
注意:返回值類型不同不算重載!下面這個會報錯:
public static int add(int a, int b) {...}
public static double add(int a, int b) {...} // 編譯錯誤
四、遞歸:程序員的"套娃"藝術
生活中的故事
從前有坐山,山上有座廟,廟里有個老和尚給小和尚將故事,講的就是:
"從前有座山,山上有座廟,廟里有個老和尚給小和尚講故事,講的就是:
“從前有座山,山上有座廟…”
“從前有座山……”
1. 遞歸三要素
- 出口條件:什么時候結束套娃
- 遞推公式:如何把問題拆解成子問題
- 調用自身:我調用我自己
階乘示例:
public static int factorial(int n) {if (n == 1) { // 出口條件return 1;}return n * factorial(n - 1); // 遞推公式 + 調用自身
}
2. 遞歸執行過程(以factorial(5)為例)
factorial(5)
│
├─ 5 * factorial(4)
│ │
│ ├─ 4 * factorial(3)
│ │ │
│ │ ├─ 3 * factorial(2)
│ │ │ │
│ │ │ ├─ 2 * factorial(1)
│ │ │ │ │
│ │ │ │ └─ return 1
│ │ │ │
│ │ │ └─ return 2
│ │ │
│ │ └─ return 6
│ │
│ └─ return 24
│
└─ return 120
3. 遞歸的坑:斐波那契數列的悲劇
public static int fib(int n) {if (n <= 2) return 1;return fib(n-1) + fib(n-2); // 重復計算爆炸!
}
改進方案:用循環或記憶化搜索
五、結語:方法使用的"三大紀律"
- 不要重復造輪子:能用方法就別復制粘貼
- 命名要見名知意:別用
a1
、func2
這種名字 - 單一職責原則:一個方法只做一件事
記住:好的方法設計,能讓你的代碼變得簡潔高效!
JavaSE往期專欄
- Java從入門到“放棄”(精通)之旅——啟航①
- Java從入門到“放棄”(精通)之旅——數據類型與變量②
- Java從入門到“放棄”(精通)之旅——運算符③
- Java從入門到“放棄”(精通)之旅——程序邏輯控制④