--- tags: Java --- # Java--類別方法 ## 程序與函數的基礎 * 程序(Subroutines或Procedures):沒有傳回值 * 函數(Functions):有傳回值 ## 建立類別方法 ### 語法與語意 :::info ```java= 存取敘述 static 傳回值型態 方法名稱(參數列) { …… 程式敘述; …… } ``` ::: * 存取敘述修飾子 「存取敘述」(Access Specifier)是一種修飾子(Modifiers), 可以是public和private * public:方法可以在程式任何地方進行呼叫, 甚至是其他類別 * private:方法只能在同一個類別內進行呼叫 * 靜態方法 static 宣告static,永遠吃掉某塊記憶體,不會消失 >* 參考:https://home.gamer.com.tw/creationDetail.php?sn=2622820 ### 呼叫類別方法 :::info ```java= 方法名稱(參數列); ``` ```java= 類別名稱.方法名稱(參數列); ``` ::: 範例1: ![](https://i.imgur.com/ZOV2sPQ.png) ![](https://i.imgur.com/EZF8lqu.png) 範例2:(呼叫其他類別的類別方法) ![](https://i.imgur.com/bMlvErB.png) ![](https://i.imgur.com/TLKASxx.png) ### 類別方法的參數傳遞 * 正式參數/假參數:識別字,其角色如同變數,需要指定資料型態 * 實際參數:方法呼叫的參數,其運算結果的值需要和正式參數定義的資料型態相同 範例: ![](https://i.imgur.com/sY9RG2Q.png) ![](https://i.imgur.com/trCHLi9.png) ### 類別方法的傳回值 * Java方法的傳回值型態不是void,而是其它資料型態int或char等 >>「函數」 * 使用「return」關鍵字 * 傳回值的型態需要與方法宣告的傳回值型態相同 範例1:(無傳回值) ![](https://i.imgur.com/wAZvvsl.png) 範例2:(有傳回值) ![](https://i.imgur.com/bOLOkAR.png) ![](https://i.imgur.com/wyb4Wla.png) 範例3:(有傳回值) ![](https://i.imgur.com/QHpDAUw.png) ![](https://i.imgur.com/Q2xuq8D.png) ### 傳值或傳址參數 * 傳值:把變數值傳入方法,方法會另外配置記憶體儲存參數值,不會變更原本呼叫的變數值 * 數值(int、double)、字元/字串(char、String) * 傳址:把變數實際儲存的記憶體位置傳入,若在方法更改參數值,也會變更原本呼叫的變數值 * 陣列(Array) 範例: ![](https://i.imgur.com/SXjcoDX.png) ![](https://i.imgur.com/u4TAvWi.png) ## 類別變數和變數範圍 * Java語言的變數分為類別的成員變數、方法參數和區域變數 * static + 成員變數 >> 類別變數 1. 區域變數範圍:在方法內宣告的變數,只能在程式碼後使用(不包括宣告前),在方法外的程式碼並無法存取此變數。 2. 方法參數範圍:傳入方法的參數變數範圍是整個方法的程式區塊,在方法外的程式碼並無法存取。 3. 成員變數範圍:不論是static的類別變數或是沒有宣告static,整個類別的程式碼都可以存取此變數。 ![](https://i.imgur.com/xJTmgK9.png) 範例: ![](https://i.imgur.com/rKvY488.png) ![](https://i.imgur.com/jhqEvLX.png) 範例: ![](https://i.imgur.com/dq4Uheq.png) ![](https://i.imgur.com/fME8k5a.png) ## 遞迴的階層函數(Recursive) * 遞迴:一個問題的內涵是由本身所定義 1. 遞迴方法在每次呼叫時,都可以使問題範圍逐漸縮小 2. 遞迴方法需要擁有終止條件,以便結束的執行 範例: ![](https://i.imgur.com/iL5KUCE.png) ![](https://i.imgur.com/sIspdJj.png) ## Math數學類別的類別方法 * 在呼叫方法時需要指明類別Math ![](https://i.imgur.com/Eg0KaDy.png) 範例: ![](https://i.imgur.com/aRMQ7Qp.png) ![](https://i.imgur.com/uDBrBRO.png)