方法,在日常生活中可以理解成解決問題或處理事情的技巧,一個方法的形成,需要思考和分析,從而形成一步一步的步驟,最後在實際執行過程中驗證自己的思路。在Java中,方法的形成亦是如此。 方法,指用於封裝一段特定的邏輯功能,如計算百分比、判斷非空、時間日期的轉換等操作,可以在程式中被反覆調用,減少重覆代碼 ...
方法,在日常生活中可以理解成解決問題或處理事情的技巧,一個方法的形成,需要思考和分析,從而形成一步一步的步驟,最後在實際執行過程中驗證自己的思路。在Java中,方法的形成亦是如此。
方法,指用於封裝一段特定的邏輯功能,如計算百分比、判斷非空、時間日期的轉換等操作,可以在程式中被反覆調用,減少重覆代碼,也便於程式維護,也可以相當於一個小輪子。
一個完整的方法主要由訪問修飾符、修飾詞、返回值類型、方法名、參數列表、異常處理、方法體七個部分組成,只能聲明在類的內部。
訪問修飾符 修飾詞 返回值類型 方法名(參數列表) throws 異常 {
方法體
}
1、訪問修飾符
用於聲明方法的可用範圍。包括public、protected、private、預設四種。public修飾的方法可以被所有類訪問。protected修飾的方法可以被位於同一包中的所有類訪問,也可以被所有子類(可以不同包)訪問。private修飾的方法只能被當前類訪問。預設,也叫無訪問修飾符,其修飾的方法可以被位於同一包中的所有類訪問。
2、修飾詞
用於聲明方法的性質或用途。包含static、final、abstract、native、synchronized五種。static修飾的方法,屬於靜態方法,也稱為類方法,可以直接通過類名點方法名調用。final修飾的方法,不能被重載(在面向對象會仔細說明重載、重寫的)。abstract修飾的方法表示此方法是一個抽象方法,表示類中已聲明但沒有實現。native修飾的方法在類中沒有實現,此修飾詞並不多用。synchronized修飾的方法,表示該方法被“鎖”,其他地方的調用無法執行,直到方法運行完,在後面的線程中會詳細介紹。
3、返回值類型
用於聲明方法的處理結果的數據類型。如果方法沒有返回值,可以使用void來聲明,表示無返回值。如果方法有返回值,則必須在方法中使用return語句,返回與返回值類型相相容的返回值數據。
4、方法名
方法的識別名稱,其命名原則遵守Java命名規範,做到見名知意,長一點也可以。
5、參數列表
用於聲明方法中需要處理的數據,是方法執行的前提條件,可以有多個相同或不同數據類型參數。
6、異常處理
使用throws聲明方法運行中可能會出現的異常,將其拋給方法調用者,常見的如空指針異常、輸入輸出異常等。
7、方法體
方法體是方法的處理過程,有具體的演算法邏輯或業務邏輯,是一個方法的核心。
package javalearningday06; import java.util.Arrays; /** * 方法 * @author 小川94 * @date 2018年3月25日 */ public class Function { public static void main(String[] args) { System.out.println(helloSomeone("")); // Hello world ! System.out.println(helloSomeone("小川94")); // Hello,小川94 ! System.out.println(randomCheckCode(4)); // 對於方法中參數的驗證 int a = 5; // 聲明的局部變數a // 將a傳給add方法,並不會使用上面已經在棧中存在的a,而是會另外在棧中開闢存儲空間,存放傳參a add(a); // 輸出列印的a是main方法中聲明的變數a,不是add方法中的傳參a System.out.println(a); // a = 5 } /** * 打招呼方法 * StringUtil為工具類,同包下的類不需要引用; * 對於傳遞進來的參數,如果後續會對其進行相關操作,請務必判斷是否為空 * @param name 名稱 * @return */ public static String helloSomeone(String name) { if (StringUtil.IsNullOrEmpty(name)) { return "Hello world !"; } return "Hello," + name + " !"; } /** * 生成num位隨機驗證碼字元串 * @param num 驗證碼位數 * @return */ private static String randomCheckCode(int num){ if (StringUtil.IsNullOrEmpty(num)) { return "請傳入需要生成幾位數驗證碼的參數!"; } if (0 == num || num < 0) { return "請傳入大於0的正整數!"; } String[] dic = {"A","B","C","D","E","F","G","H","I","J", "K","L","M","N","O","P","Q","R","S","T", "U","V","W","X","Y","Z","0","1","2","3", "4","5","6","7","8","9"}; String[] strArr = new String[num]; for (int i=0; i<strArr.length; i++) { int index = (int)(Math.random()*dic.length); strArr[i] = dic[index]; } return Arrays.toString(strArr); } /** * 關於方法中變數的問題: * 方法中聲明的變數、參數列表的傳參都是局部變數,運行期間,都會在棧中分配存儲空間 * @param a */ protected static void add(int a) { a++; } }
下麵是一個是否為空判斷的工具類
package javalearningday06; /** * 是否為空工具類 * @author 小川94 * @date 2018年3月25日 */ public class StringUtil { /** * 判斷對象是否為null或者空字元串 * @param obj * @return */ public static boolean IsNullOrEmpty(Object obj){ if (obj == null) { return true; } if (obj.toString().trim().equals("")) { return true; } return false; } /** * 判斷對象不為null或空字元串 * @param obj * @return */ public static boolean IsNotEmpty(Object obj){ return !IsNullOrEmpty(obj); } }
對於方法,也可以這樣通俗的理解,將整個方法當做一臺可以重覆生產產品的機器,訪問修飾符相當於這台機器可以由誰來操作;修飾詞相當於機器的設置,對產品規格、重量等的設置;返回值類型相當於最後的成品;方法名就是這台機器的名字、編號;參數列表就是生產產品的原料;異常處理相當於機器運行過程中可能會出現的故障;方法體就是機器的加工過程了,最後通過return語句,來生成最終的成品。
Java的高級特性是面向對象,可以對萬事萬物進行抽象處理,一切皆對象,其中有抽象映射具體、具體歸納抽象的相互轉化,這些不僅會在編程中運用,生活中亦是如此。
上面的代碼都上傳至了GitHub,地址是https://github.com/XiaoChuan94/javalearning/tree/master/javalearningday06,有需要的可以去下載觀看,如果喜歡就給個star吧!如有不足,歡迎下方留言交流。
文章首發於我的個人公眾號:悅樂書。喜歡分享一路上聽過的歌,看過的電影,讀過的書,敲過的代碼,深夜的沉思。期待你的關註!
公眾號後臺輸入關鍵字“Java學習電子書”,即可獲得12本Java學習相關的電子書資源,如果經濟能力允許,還請支持圖書作者的紙質正版書籍,創作不易。