一、概述
方法是指人們在實踐過程中爲達到一定目的和效果所採取的辦法、手段和解決方案。
所謂方法,就是解決一類問題的代碼的有序組合,是一個功能模塊。編程語言中的方法是組合在一起來執行操作語句的集合。例如,System.out.println 方法,該系統實際上是爲了在控制檯上輸出的消息執行多條語句。可以將方法理解爲“CD機”即放入不同的碟片出現不同的歌曲;或“榨汁機”即放入不同的水果榨出不同的果汁。
方法就是 給能夠解決問題的多行代碼取了一個名字的功能塊 ,方便我們多次使用。方法的作用:
1)、main方法過於臃腫
2)、重複執行的代碼塊 命名,方便重複使用
3)、方便自上而下分解問題
4)、方便維護代碼
現在,我們將學習如何定義自己的方法有或沒有返回值,使用即調用帶或不帶參數,使用相同的名稱重載方法的方法中。
二、定義(method define)
2.1 聲明格式:
1)、訪問修飾符:方法允許被訪問的權限範圍;
2)、返回值類型:如果方法不返回任何值,則指定爲void;如果方法具有返回值,
則需要指定返回值的類型,並且在方法體中使用 return語句返回值;
3)、方法名:定義方法的名字,必須使用合法的標識符,見名知意。
4)、形參列表:參數可以有多個,多個參數間以逗號隔開,每個參數由參數類型和參數名組成,以空格隔開。
2.2 現有格式:
注意: 方法只能定義在類中;同時方法不能嵌套;方法編寫位置與使用無關。
2.3 分類
根據方法是否帶參、是否有返回值,可以將方法分爲:
2.4 void 關鍵字
一個 void方法,它不返回任何值。
2.5 return關鍵字
return 爲 跳出方法 或 返回值。
注意:在一個作用域內 return 之後不能再存在代碼
return語句:
①return語句可以出現在任何(有返回值和沒有返回值)方法中
②return語句 在沒有返回值的方法中,用來提前結束方法
③return語句 在有返回值的方法當中,有兩個作用:提前結束方法,送出結果。
④一個方法只能執行一條return語句
⑤在一定會被執行的return語句後,寫的語句爲不可達語句,程序自動檢測這種語句,永遠不會被執行到,報錯。
⑥在循環中無條件的break後寫語句,會出現不可達語句
⑦在死循環(沒有break來結束的死循環)後寫語句,會出現不可達語句
2.6 思考角度
編寫一個方法時,請思考這四個方面:
1)、確定方法的功能
2)、確定方法的名稱
3)、此方法能否獨立運行,不能獨立,需要外界數據參與運算,確定形參。
4)、此方法完成後,其結果是否直接影響調用處的後續操作,如果影響,確定返回類型,不影響則爲 void
2.7 簽名(signature)
方法的簽名,確保在一個類中的唯一性。方法的簽名只看 方法名和形參
( 類型 個數 和順序) ,與修飾符 返回類型 和形參名無關。
三、調用(method invoke)
3.1 格式
方法定義完成後,若要使用,必須調用它。在調用時,調用的控制權由方法調用處轉移到方法中,方法遇到 return 或者 }結束時,將調用權交還給調用處。也就是”從哪裏來到哪裏去”的套路。
如調用以上方法:
①如果該方法返回 void,則調用該方法必須是一個語句,不能使用變量接收。
②如果該方法具有返回類型,返回一個值,調用該方法通常被視爲一個值。
總結如下:
[接收變量=]方法名([實參列表])
①void 沒有返回值,不能使用接收變量。
②存在返回值,接收變量或匿名接收(輸出或者調用)
3.2 類型兼容
在調用方法時,形參與實參,接收類型與返回類型和返回值類型應該保持兼容。
①形參>=實參
②接收類型>=返回值類型>=return類型
3.3 值傳遞
當使用一個參數調用一個方法時,參數的值拷貝給參數,即拷貝副本。這被稱作按值傳遞。
四、重載(method invoke)
一般來說,功能點相同的方法才適合使用重載,重載必須滿足如下要求:
①必須是同一個類
②方法名必須相同
③參數列表不同
注意:方法重載與返回值無關。
參數列表不同:
參數的個數不同。
參數的對應的數據類型不同。
參數的順序不同(不同類型的可以交換位置)
五、遞歸結構
遞歸是一種常見的解決問題的方法,即把問題逐漸簡單化。 遞歸的基本思想就是 自己調用自己 ”,一個使用遞歸技術的方法將會直接或者間接的調用自己。利用遞歸可以用簡單的程序來解決一些複雜的問題。比如:大多數排序使用的就是遞歸算法。
遞歸結構包括兩個部分:
① 定義遞歸頭。解答:什麼時候不調用自身方法。如果沒有頭,將陷入死循環。
② 遞歸體。解答:什麼時候需要調用自身方法。
遞歸的缺陷:
簡單的程序是遞歸的優點之一。但是遞歸調用會佔用大量的系統堆棧,內存耗用多,在遞歸調用層次多時速度要比循環慢的多。所以再使用時要慎重。
注意:任何可用遞歸解決的問題也能使用迭代解決。但遞歸方法可以更加自然地反映問題,並且易於理解和調試,並且不強調效率問題時,可以採用遞歸;
在要求高性能的情況下儘量避免使用遞歸,遞歸調用既花時間又耗內存。