前言
“方法”又被稱為“函數”,其他的編程語言也有這個概念,重要性不言而喻,在這個文章,將介紹如何定義和使用方法。
一、方法的基本用法
1.什么是方法
在Java中,方法定義在類中,它和類的成員屬性(數據成員)一起構建一個完整的類。構成方法有四大類――返回值類型、方法名稱、參數、方法體。
方法就像一個功能,當我們需要用到的時候,就去調用它,不用的時候就放到一邊。
也可以說它是一本工具書,當我們需要查看的時候,我們就會去找這本書查資料,不用的時候就放在書柜里面。
2.方法的基本定義
//方法定義
public static 方法返回值 方法名稱([參數類型 形參 …]){
方法體代碼;
[return 返回值];
}
// 方法調用
返回值變量 = 方法名稱(實參…);
可以看出,方法包含一個方法頭和一個方法體。
返回值類型:指定了方法返回的數據類型。它可以是任意有效的類型,包括構造類型(類就是一種構造類型)。如果方法沒有返回值,則其返回類型必須是void。方法體中的返回值類型要與方法頭中定義的返回值類型一致。
public class TestDemo { public static void main(String[] args) { int a = 10; int b = 20; // 方法的調用 int ret = add(a, b); System.out.println("ret = " + ret); } // 方法的定義 public static int add(int x, int y) { return x + y; } }
3.方法調用的執行過程
- 定義方法的時候, 不會執行方法的代碼. 只有調用的時候才會執行.
- 當方法被調用的時候, 會將實參賦值給形參.
- 參數傳遞完畢后, 就會執行到方法體代碼.
- 當方法執行完畢之后(遇到 return 語句), 就執行完畢, 回到方法調用位置繼續往下執行.
- 一個方法可以被多次調用
4.方法中的實參和形參
形參:
在定義一個方法時,參數列表中的參數個數至少為1個。
實參:
調用方法時,需要調用者提供與原方法定義相匹配的參數(類型、數量、順序都一致)
那么形參與實參的關系又是怎樣的呢?
- 形參變量隸屬于方法體,也就是說它們是方法的局部變量,只有在被調用的時候才被創建,才被臨時性分配內存,在調用結束后,立即釋放所分配的內存單元。也就是說,當方法調用返回后,就不能再使用這些參數了。
- 在調用方法時,實參和形參在數量上、類型上、順序上應嚴格保證一一對應的關系,否則就會出現參數類型不匹配的錯誤,從而導致調用方法失敗。如下:
二、方法的重載
1.重載的概念
【概念】
方法重載是指在一個類中定義多個同名的方法,但要求每個方法具有不同的參數的類型或參數的個數。調用重載方法時,Java編譯器能通過檢查調用的方法的參數類型和個數選擇一個恰當的方法。
2.例題分析
認真看下面例子中的add方法
public static void main(String[] args) { int a = 10; int b = 20; int ret = add(a, b); System.out.println("ret = " + ret); double a2 = 10.5; double b2 = 20.5; double ret2 = add(a2, b2); System.out.println("ret2 = " + ret2); double a3 = 10.5; double b3 = 10.5; double c3 = 20.5; double ret3 = add(a3, b3, c3); System.out.println("ret3 = " + ret3); } public static int add(int x, int y) { return x + y; } public static double add(double x, double y) { return x + y; } public static double add(double x, double y, double z) { return x + y + z; }
【總結】
方法的名字都叫 add. 但是有的 add 是計算 int 相加, 有的是 double 相加; 有的計算兩個數字相加, 有的是計算三個數
字相加.
同一個方法名字, 提供不同版本的實現, 稱為 方法重載
【注意】
一.方法名一定要相同。
二.方法的參數表必須不同,包括參數的類型或個數,以此區分不同的方法體。
1.如果參數個數不同,就不管它的參數類型了!
2.如果參數個數相同,那么參數的類型必須不同。
三.方法的返回類型、修飾符可以相同,也可不同。
data = pd.read_csv( 'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv') print(data.head())
三、方法的遞歸
1.遞歸定義
簡單來說,遞歸算是套娃。
從前有座山,山里有座廟,廟里有個老和尚,老和尚正在給小和尚講故事:從前有座山,山里有座廟,廟里有個老和尚,老和尚正在給小和尚講故事:…
除非老和尚不講了,否則這個故事就一直套娃下去。
遞歸,就是在運行的過程中調用自己。
構成遞歸需具備的條件:
- 子問題須與原始問題為同樣的事,且更為簡單;
- 不能無限制地調用本身,須有個出口,化簡為非遞歸狀況處理。
2.例題分析
舉個例子:遞歸求 N 的階乘
public static void main(String[] args) { int n = 5; int ret = factor(n); System.out.println("ret = " + ret); } public static int factor(int n) { System.out.println("函數開始, n = " + n); if (n == 1) { System.out.println("函數結束, n = 1 ret = 1"); return 1; }else{ int ret = n * factor(n - 1); System.out.println("函數結束, n = " + n + " ret = " + ret); return ret; } }
分析遞歸過程如下:
3.遞歸應用場景
遞歸算法一般用于解決三類問題:
- 數據的定義是按遞歸定義的。(Fibonacci函數)
- 問題解法按遞歸算法實現。這類問題雖則本身沒有明顯的遞歸結構,但用遞歸求解比迭代求解更簡單,如Hanoi問題。
- 數據的結構形式是按遞歸定義的。如二叉樹、廣義表等,由于結構本身固有的遞歸特性,則它們的操作可遞歸地描述。
【注意】
雖然遞歸操作有很多的優點,但是缺點也很明顯
- 使用遞歸實現需要函數壓棧和彈棧的操作,所以程序的運行速度比不用遞歸實現要慢得多。如果操作不慎,還極易出現死循環,所以在使用遞歸一定要設置遞歸操作的終止條件。
下面給大家推薦遞歸的兩個經典例題:
- 求斐波那契數列的第 N 項
- 求解漢諾塔問題(提示, 使用遞歸)
- 青蛙跳臺階問題(提示, 使用遞歸)
有興趣的同學可以去自行嘗試!
總結
最近在看《士兵突擊》,迷惘了,希望能夠找點東西激勵自己?!妒勘粨簟吩谀撤N程度上,真的讓我感悟良多。推薦大家去看看。
里面的臺詞讓我受益良多。
“心穩了,手也就穩了”
“想到和得到之間還有兩個字,就是做到”
各位,共勉了!
到此這篇關于Java程序中方法的用法重載和遞歸的文章就介紹到這了,更多相關Java 方法 內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/weixin_46913665/article/details/120926215