java基礎之 方法

一、什麼是方法

方法是用來完成特定功能的代碼片段。

比如說我們最常用的 System.out.println(); 這一段代碼中 println() 就是方法,它完成的特定功能是在控制檯輸出我們需要輸出的內容。

二、方法該怎麼寫

修飾符 返回值類型 方法名稱 (參數類型 參數名稱){

​ ...方法體...

​ return 返回值;

}

  • 修飾符:定義方法訪問的權限,有默認值,具體修飾符開 附錄Ⅰ。
  • 返回值類型:說明方法進行後返回數據的類型,方法執行後沒有返回結果就寫void,不能省略不寫。
  • 方法名:方法名是給代碼段起一個名字,方便調用方法。名字要符合命名規範。
  • 參數類型:參數就像一個佔位符,方法內部使用參數來模擬傳入的數據;如果參數傳入值,佔位符就會直接被參數替換掉。如果方法不需要參數,可以省略不寫。
  • 方法體:完成特定功能的代碼段。
  • 返回值:當代碼執行完成後應該告訴調用者的內容,當然也可以什麼也不告訴,我們只要不寫 return 就表示沒有返回值。
// 實例:寫一個計算2個整數的和的方法

//修飾符       返回值 方法名  參數類型 參數名稱
public static int   add   (int     number1, int number2) {
    // 方法體
    int sum = number1 + number2;
    // 返回值
    return sum;
}

三、方法如何調用

方法名(參數值);

  • 方法名:我們在寫方法時定義的名字。
  • 參數值:方法在定義時需要我們傳入的值,比如上面的方法sum就需要我們傳入2個整數,我們在調用方法時就應該把2個整數值傳遞過去,如果調用時不傳入參數,程序就會報錯。
  • 如果方法有返回值的,我們可以使用一個變量存放起來,便於後面使用。
public static void main(String[] args) {
    
    // 方法的調用
    int sum = add(1,2);

    // 使用方法的返回值
    System.out.println(sum);
    
}

// 輸出
3

四、方法的重載

書寫一個 同名不同參 的方法,這種行爲叫做方法的重載。

  • 方法名必須相同,如果不同就不能稱爲重載。
  • 參數必須不同,可以是類型或者數量不同。
  • 返回值類型不影響方法的重載,只要符合上面的2種情況即可。
// 書寫一個add的重載方法,使其能計算2個double類型的數字之和
public static double   add   (double     number1, double number2) {
    
    // 方法體
    double sum = number1 + number2;
    // 返回值
    return sum;
    
}
  • 在調用 add 方法時,jvm會根據傳入的參數去匹配對應的方法。
public static void main(String[] args) {

    // 方法的調用
    int sum = add(1, 2);
    // 使用方法的返回值
    System.out.println(sum);

    double sum2 = add(1.0, 2.0);
    System.out.println(sum2);

}

// 輸出
3
3.0

五、不定項參數

在傳遞參數時,在參數類型的後面添加 ... 表示這個參數爲不定項參數,

也就是同類型的參數可以書寫多個。

  • 不定項參數支持 jdk1.5+
  • 不定項參數只能放在參數的最後一個,普通參數放在前面。
// 實例:根據傳入的整數,計算整數之和
public static double add(double... numbers) {
    System.out.println("不定項參數");
    // 方法體
    double sum = 0.0;
    for (int i = 0; i < numbers.length; i++) {
        sum += numbers[i];
    }
    // 返回值
    return sum;
}
  • 在調用方法時,固定參數優先級大於不定項參數方法。
public static void main(String[] args) {

    // 方法的調用
    int sum = add(1, 2);
    // 使用方法的返回值
    System.out.println(sum);

    // 符合條件的方法存在2個,這是會根據優先級大小來調用
    double sum2 = add(1.0, 2.0);
    System.out.println(sum2);

    double sum3 = add(1.0, 2.0, 3.0);
    System.out.println(sum2);

}

// 輸出
3
重載add方法
3.0
不定項參數
3.0

六、遞歸

函數調用它自身的情況成爲遞歸

  • 新的問題和原來的問題有同樣的解決方式時我們可以遞歸。
  • 必須存在一種可能,使遞歸可以被結束。
// 實例:遍歷文件夾下的所有子文件。
// 文件夾下即可能存在文件,也可能是文件夾,
// 如果是文件夾,那麼它下面也即可能存在文件,也可能是文件夾,
// 這樣子文件夾的問題和我們要查詢的總文件夾有同樣的處理方式,這時我們就可以使用遞歸來處理。
public static void dirAllFile(File file) {
    // 獲取文件夾的文件列表
    File[] files = file.listFiles();
    Optional<File[]> optionalFiles = Optional.ofNullable(files);
    // 判斷是否存在文件
    if (optionalFiles.isPresent()) {
        // 存在文件就比遍歷文件
        for (File temp : optionalFiles.get()) {
            // 如果當前的對象是一個文件夾,我們需要遍歷文件夾下的所有文件
            if (temp.isDirectory()) {
                System.out.println("目錄=" + temp.getName());
                // 遞歸
                dirAllFile(temp);
            } else {
                System.out.println("\t文件=" + temp.getName());
            }
        }
    }
}

// 調用
public static void main(String[] args) {
    dirAllFile(new File("E:\\項目\\security"));
}

// 輸出
目錄=exception
	文件=ValidateCodeException.java
目錄=filter
	文件=JwtAuthenticationTokenFilter.java
	文件=ValidateCodeFilter.java
目錄=handle
	文件=AuthenticationEntryPointImpl.java
	文件=JsonAccessDeniedHandler.java
	文件=JsonAuthenticationEntryPoint.java
	文件=JsonFailureHandler.java
	文件=JsonLogoutSuccessHandler.java
	文件=JsonSuccessHandler.java
	文件=LogoutSuccessHandlerImpl.java
	文件=LoginBody.java
	文件=LoginUser.java
目錄=model
	文件=LoginBody.java
	文件=LoginUser.java
	文件=SecurityConfig.java
	文件=SecurityUtils.java
目錄=service
	文件=PermissionService.java
	文件=SysLoginService.java
	文件=SysPermissionService.java
	文件=TokenService.java
	文件=UrlAccessDecisionManager.java
	文件=UrlFilterInvocationSecurityMetadataSource.java
	文件=UserDetailsServiceImpl.java

下面這張圖片是實際的文件樹

image-20210519144518080

  • 遞歸會根據數據一直調用自身,層數越多消耗的資源越多,數據量大時不建議使用;假設你要遍歷整個磁盤的文件,這時就不建議使用。

附錄Ⅰ 方法修飾符

默認值default,不寫修飾符即默認default;Y 表示可以訪問,N表不可訪問。

修飾符 當前類 同一個包 子孫類(同一包) 子孫類(不同包) 其他包
public Y Y Y Y Y
protected Y Y Y N
default Y Y Y N N
private Y N N N N
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章