方法是什么?
方法是可以完成某個特定的功能的并且可以被重復利用的代碼片段,方法的出現,讓代碼有了很強大復用性
方法定義:
[修飾符串列] 回傳值型別 方法名(形式引數串列){
方法體;
}
形式引數串列:
簡稱:形參
形式引數串列中的每一個引數都是"區域變數",方法結束后記憶體釋放,形參的個數有(0-n)個,形參有多 個的話,使用","隔開,是英文的逗號, 形參的資料型別起決定性作用,形參的變數名隨意
方法體:
由java陳述句構成,方法體中撰寫的代碼是業務邏輯代碼,完成某個特定的功能,在方法體中處理業務邏輯 代碼需要的資料,資料來源就是這些形參
注解:在寫方法時引數是形參,而在呼叫有引數的方法時,這個引數串列為實參(實際引數串列),形參和實參必須一一對應,型別對應,個數對應,
回傳值型別:
- 回傳值一般指的是一個方法結束之后的結果,方法就是為了完成某個特定的功能,方法結束后,大部分都有一個結果,而體現結果的一般都是資料,資料得有型別,這就是回傳值型別
- 回傳值型別可以是任何型別(基本資料型別/參考資料型別)
- 回傳值型別不能不寫,當一個方法執行結束不回傳任何值時,必須寫void關鍵字
- 回傳值型別不是void,那么在方法執行結束的時候必須使用"return 值"這樣的陳述句來完成"值"的回傳,不然會編譯報錯
- 如果回傳值型別是void,那么在方法體當中不能有"return 值",這樣的陳述句,但是可以有"return;",這樣的陳述句,
注解:"return;"作用終止當前方法,只要有"return ;"關鍵字的陳述句執行,當前方法必然結束,但是不是整個程式結束,而寫上System.exit(0);陳述句, 運行時則終止程式的執行,強行退出JVM
注意:方法定義的先后順序沒有關系,方法定義在類體中,但是在java語言中所有的方法體中的代碼都必須遵循自上而下的順序依次逐行執行,
方法呼叫的時候,該方法需要記憶體空間,在堆疊中分配,而且方法只有在呼叫的時候才會在堆疊中分配空間,并且呼叫時就是壓堆疊,分配空間,方法執行結束后,該方法需要的空間就會釋放,此時發生彈堆疊動作
方法呼叫時引數的傳遞問題:
引數傳遞的時候,和型別無關,不管是基本資料型別還是參考資料型別,統一都是將變數(盒子)中保存的那個值復制一份,傳遞下去,但是這個值可能是一個數字100,也可能是物件的記憶體地址(記憶體地址也是一個值),就一句話:不管是哪一種資料型別的傳遞,都是將變數中保存的那個值復制一份傳遞過去,
注解:堆疊中存盤方法運行需要的記憶體,以及堆疊中存盤方法的區域變數
區域變數有一個特點:方法結束之后,區域變數占用的記憶體會自動釋放
注意:程式開始執行的時候是先執行main方法,因為main方法是程式入口,main方法不需要程式員手動呼叫,是由JVM呼叫的,但是除了main方法其他方法都需要程式員手動呼叫才能被執行,在使用方法時,自定義的方法可以呼叫main方法,但是沒有意義,容易出現無限呼叫,一個方法不能再另外一個方法里宣告(方法與方法之間關系是平級關系)
方法多載(overload)
什么情況下考慮使用方法多載機制?
當多個方法功能相似的時候,建議將方法名定義為一致的,這樣代碼美觀,又方便編程(容易記憶,方便使用)
注意:方法多載不能隨便使用,如果功能不相似,就不要使用
滿足什么條件的時候構成了方法多載?
- 在同一個類中
- 方法名相同
- 形式引數串列不同(引數個數不同,引數資料型別不同,引數順序不同)
方法多載優點:代碼美觀、方便代碼的撰寫
方法遞回
什么是方法遞回?
方法自身呼叫自身,
注意:使用遞回的時候,必須添加結束條件,沒有結束條件,會發生堆疊記憶體溢位錯誤,但是當遞回有結束條件,并且結束條件合法的時候,也可能會發生堆疊記憶體溢位錯誤,原因:遞回太深,堆疊記憶體不夠了
堆疊記憶體溢位錯誤:StackOverflowError,原因:堆疊記憶體不夠
方法遞回簡單例子:
1 public class Test { 2 public static void main(String[] args) { 3 int add = add(10); 4 System.out.println(add); 5 } 6 public static int add(int n) { 7 if (n ==1) { 8 return 1; 9 } 10 return n +add(n - 1); 11 } 12 }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/116776.html
標籤:Java
上一篇:JVM記憶體結構
下一篇:回首Java——再回首JDK
