文章目錄
- 一、方法的基本使用
- 1.什么是方法?
- 2.方法定義語法
- 3.方法呼叫和記憶體的關系
- 4.形參和實參的關系
- 二、方法的多載
- 多載的規則:
- 三、方法的遞回
- 1.遞回的注意事項
- 2.遞回程序
- 3.遞回總結
一、方法的基本使用
1.什么是方法?
方法就是把一個以后可能會多次使用的一段代碼,把它封裝成一個功能,
可以把方法理解為C語言里的函式,但只是類似于C語言的函式并不是完全相同的,
方法存在的意義:
1.在復雜的場景然代碼模塊化
2.讓一份代碼在多個位置重復使用
3.讓代碼更容易理解
4.多次使用一個功能時,直接呼叫方法避免代碼的冗余
2.方法定義語法
//方法定義
public static 方法回傳值 方法名稱 ([引數型別 形參]){
方法體代碼;
[return 回傳值]
}
//方法呼叫
回傳值變數 = 方法的名稱(實參...);
代碼示例:
呼叫方法求兩個數的較大值
public class Test{
public static int max(int a,int b){
return a>b?a:b;
}
public static void main(String[] args) {
int a = 100;
int b = 200;
int ret = max(a,b);
System.out.println(ret);
}
}

執行代碼會方法回傳了兩個數的最大值:

3.方法呼叫和記憶體的關系
java中JVM上共有5塊記憶體區域,方法的呼叫是依賴于站的,每次呼叫一個方法,都會在堆疊上為這個方法開辟一塊記憶體,把這個記憶體叫做:堆疊幀
我們平時所說的堆疊:就是JVM Stack 也就是JAVA虛擬機堆疊

堆疊的原理是:先進后出,那我們上面的求兩個數的最大值的代碼來說

但方法運行完 return 后

當整個程式結束后main方法同樣也會被釋放掉,這就是堆疊的先進后出原理,
4.形參和實參的關系
實參也叫實際引數,是呼叫方法傳遞過去的引數,
形參也叫形式引數,是方法接收實參的引數,
來看一段代碼:
public class Test{
public static void exchange(int a,int b){
int tmp = a;
a = b;
b = tmp;
}
public static void main(String[] args) {
int a = 100;
int b = 200;
exchange(a,b);
System.out.println("a="+a+" b="+b);
}
}
運行結果
a和b的值并沒有進行交換,
因為我們傳遞的是實參,接收的是形參,而形參只是實參的一份臨時拷貝,在exchange方法里我們交換的只是形參的值,我們上面也說過,方法在呼叫完后會被自動銷毀,所以a和b的值并沒有發生改變,
那要怎么樣樣才能交換這兩個值呢,那就是傳參考,這里先不細說,后面的博客會講到,
還有一些要注意的點:
1.在java當中沒有取地址(&)這種操作
2.在java中堆疊上的地址是拿不到的
3.在傳遞引數時形參和實參要一,一對應(型別和順序)
二、方法的多載
有些時候我們需要用一個函式同時兼容多種引數的情況, 我們就可以使用到方法的多載,
來看一個例子,就比如我要求兩個數的和

我們可以看到我們這個求和方法,只能求整形但傳浮點型的引數時就報錯,那是不是還要再寫一個函式呢?
public class Test{
public static int addInt(int a,int b){
return a+b;
}
public static double addDouble(double a, double b){
return a+b;
}
public static void main(String[] args) {
int a = 100;
int b = 200;
double c = 25.5;
double d = 35.5;
System.out.println(addInt(a, b));
System.out.println(addDouble(c, d));
}
}
那我們是不是改寫這樣的代碼呢?其實這樣并不好,int型別一個,double型別一個,那如果我們需要三個或者四個int或者double的數相加呢,那不是要很多個方法名?所以這樣并不好,還不如直接都叫add,這里就需要用到方法的多載了,
來看代碼
public class Test{
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 void main(String[] args) {
int a1 = 100;
int a2 = 200;
int a3 = 200;
double b1 = 25.5;
double b2 = 35.5;
System.out.println(add(a1, a2));
System.out.println(add(a1,a2,a3));
System.out.println(add(b1,b2));
}
}
運行結果

我們發現方法名相同,但引數的回傳型別和引數的個數不同都能使用,
同一個方法名字, 提供不同版本的實作, 稱為 方法多載

如果方法名和引數串列都相同,方法多載就會不可用,編譯器會報錯,
多載的規則:
1.方法名相同
2.方法的引數串列不同(回傳型別和引數個數)
3.方法的回傳值不做要求(回傳值一樣或者不一樣,不影響多載)
三、方法的遞回
遞回:其實就是方法自己呼叫自己的一個程序
1.遞回的注意事項
1.要有一個趨近于終止的條件
2.寫遞回程式時,遞回公式是要自己推到的(這也是一個難點)
2.遞回程序
來看一段代碼,遞回求N的階層
public class Test{
public static int fac(int n){
if(n==1){
return 1;
}else{
return n*fac(n-1);
}
}
public static void main(String[] args) {
System.out.println(fac(4));
}
}
運行結果

再來通過圖看一下詳細的遞回程序

3.遞回總結
1.遞回其實就是然代碼簡潔化,有些問題遞回和迭代(回圈)都能解決,而且迭代會更快,
2.能用迭代用迭代不能迭代用遞回,
注意:如果遞回程度太深會出現堆疊溢位例外
堆疊溢位例外的原因有兩種:
1.引數太大
2.終止條件不對
感謝閱讀!下一篇陣列馬上更新!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/279235.html
標籤:java
