|函數(shù) (方法) 詳解)
一、引入如果程序中大量書寫重復(fù)代碼會(huì)帶來以下問題代碼冗余可讀性低后期不利于維護(hù)解決思路 把重復(fù)的代碼只定義一次給這段代碼起名字后續(xù)需要使用時(shí)直接通過名字調(diào)用執(zhí)行。二、函數(shù)1. 概念函數(shù)是實(shí)現(xiàn)特定功能的一段程序代碼可以通過函數(shù)名字被反復(fù)調(diào)用使用。2. 函數(shù)的使用流程函數(shù)的定義函數(shù)的聲明確定函數(shù)功能、函數(shù)名稱、參數(shù)、返回值函數(shù)的實(shí)現(xiàn)書寫函數(shù)內(nèi)部具體業(yè)務(wù)代碼函數(shù)的調(diào)用通過函數(shù)名字執(zhí)行函數(shù)完成對(duì)應(yīng)功能3. 函數(shù)定義位置函數(shù)定義在類內(nèi)部其他函數(shù)外部。當(dāng)前階段和 main 方法并列書寫。三、函數(shù)的定義1. 基礎(chǔ)語法public static void 函數(shù)名字(數(shù)據(jù)類型 變量名){ // 函數(shù)體實(shí)現(xiàn)功能的代碼 }函數(shù)三要素返回值、函數(shù)名、形參列表。2. 函數(shù)名遵循標(biāo)識(shí)符命名規(guī)范見名知意小駝峰命名第一個(gè)單詞首字母小寫其余單詞首字母大寫3. 參數(shù)參數(shù)調(diào)用者和函數(shù)之間傳遞的數(shù)據(jù)。語法public static void 函數(shù)名字(數(shù)據(jù)類型 變量名,數(shù)據(jù)類型 變量名)形式參數(shù)形參定義函數(shù)時(shí)括號(hào)中聲明的變量。相當(dāng)于函數(shù)內(nèi)部的局部變量函數(shù)內(nèi)部直接使用參數(shù)名。一個(gè)函數(shù)可以有多個(gè)形參每個(gè)參數(shù)都必須寫數(shù)據(jù)類型類型相同也不能省略類型多個(gè)參數(shù)用逗號(hào)隔開。形參列表長度0 ~ n個(gè)。4. 返回值1void無返回值void代表函數(shù)不需要向調(diào)用者返回結(jié)果。public static void 函數(shù)名(形參列表){ // 可以不寫return // 也可以寫 return; 作用直接結(jié)束當(dāng)前函數(shù) return; }2有返回值8 種基本類型 / 引用類型函數(shù)執(zhí)行完成后需要把結(jié)果返回給調(diào)用處。public static 數(shù)據(jù)類型 函數(shù)名(形參列表){ return xxx; // return后面數(shù)據(jù)類型必須和函數(shù)聲明的返回值類型保持一致 }return 兩大作用將函數(shù)執(zhí)行結(jié)果返回給調(diào)用者結(jié)束當(dāng)前函數(shù)return之后不能書寫其他執(zhí)行語句return 使用細(xì)節(jié)函數(shù)返回值類型不為void函數(shù)中必須保證有 return 返回?cái)?shù)據(jù)。如果 return 寫在分支內(nèi)部必須保證每一條分支路徑都存在 return 語句否則編譯報(bào)錯(cuò)。四、函數(shù)的調(diào)用1. 無參函數(shù)調(diào)用函數(shù)名();2. 帶參數(shù)函數(shù)調(diào)用函數(shù)名(實(shí)參1,實(shí)參2,實(shí)參3);實(shí)際參數(shù)實(shí)參調(diào)用函數(shù)時(shí)傳入的數(shù)據(jù)用來給形參賦值。 ??實(shí)參的類型、個(gè)數(shù)、順序必須和形參列表保持一致。3. 帶返回值函數(shù)調(diào)用數(shù)據(jù)類型 變量名 函數(shù)名(實(shí)參);有返回值函數(shù)三種處理方式使用相同類型變量接收返回值最常用數(shù)據(jù)類型 變量 函數(shù)名(實(shí)參);直接調(diào)用不接收返回值實(shí)際開發(fā)極少使用函數(shù)名(實(shí)參);直接寫在打印語句或者運(yùn)算表達(dá)式中只使用一次結(jié)果System.out.println(函數(shù)名(實(shí)參)); int res 10 函數(shù)名(實(shí)參);注意void無返回值函數(shù)不能直接放入System.out.println()打印。五、函數(shù)的作用減少代碼冗余提高代碼可讀性提高代碼可維護(hù)性提高代碼復(fù)用性便于團(tuán)隊(duì)分工、協(xié)同開發(fā)六、函數(shù)的嵌套調(diào)用1. 概念在一個(gè)函數(shù)內(nèi)部調(diào)用另外一個(gè)函數(shù)。2. 執(zhí)行原理程序從上向下執(zhí)行遇到函數(shù)調(diào)用跳轉(zhuǎn)到被調(diào)用函數(shù)執(zhí)行被調(diào)用函數(shù)全部執(zhí)行完畢之后攜帶返回值回到調(diào)用位置繼續(xù)向下執(zhí)行原有函數(shù)剩余代碼。3. JVM 棧內(nèi)存簡單理解JVM 虛擬機(jī)棧是 Java 函數(shù)執(zhí)行的內(nèi)存模型。每一個(gè)函數(shù)執(zhí)行都會(huì)創(chuàng)建一塊棧幀 (Stack Frame)。棧幀保存局部變量表、操作數(shù)棧、函數(shù)出口等信息。函數(shù)執(zhí)行結(jié)束返回調(diào)用位置該函數(shù)對(duì)應(yīng)的棧幀內(nèi)存直接回收。七、遞歸遞歸概念函數(shù)的內(nèi)部調(diào)用函數(shù)自身稱為遞歸調(diào)用。??無窮遞歸會(huì)拋出異常java.lang.StackOverflowError棧溢出。寫遞歸一定要定義遞歸出口終止條件避免無限調(diào)用。案例階乘計(jì)算。適用場(chǎng)景復(fù)雜問題可以拆解成若干相同邏輯的子問題。