1. 程式人生 > 實用技巧 >java中的方法

java中的方法

方法是什麼?

方法是可以完成某個特定的功能的並且可以被重複利用的程式碼片段,方法的出現,讓程式碼有了很強大複用性

方法定義:

[修飾符列表] 返回值型別  方法名(形式引數列表){
            方法體;
        }

形式引數列表:

簡稱:形參

形式引數列表中的每一個引數都是"區域性變數",方法結束後記憶體釋放,形參的個數有(0-n)個,形參有多 個的話,使用","隔開,是英文的逗號, 形參的資料型別起決定性作用,形參的變數名隨意

方法體:

由java語句構成,方法體中編寫的程式碼是業務邏輯程式碼,完成某個特定的功能,在方法體中處理業務邏輯 程式碼需要的資料,資料來源就是這些形參

註解:在寫方法時引數是形參,而在呼叫有引數的方法時,這個引數列表為實參(實際引數列表),形參和實參必須一一對應,型別對應,個數對應。

返回值型別:

  1. 返回值一般指的是一個方法結束之後的結果,方法就是為了完成某個特定的功能,方法結束後,大部分都有一個結果,而體現結果的一般都是資料,資料得有型別,這就是返回值型別
  2. 返回值型別可以是任何型別(基本資料型別/引用資料型別)
  3. 返回值型別不能不寫,當一個方法執行結束不返回任何值時,必須寫void關鍵字
  4. 返回值型別不是void,那麼在方法執行結束的時候必須使用"return 值"這樣的語句來完成"值"的返回,不然會編譯報錯
  5. 如果返回值型別是void,那麼在方法體當中不能有"return 值",這樣的語句,但是可以有"return;",這樣的語句。

註解:"return;"作用終止當前方法,只要有"return ;"關鍵字的語句執行,當前方法必然結束,但是不是整個程式結束,而寫上System.exit(0);語句, 執行時則終止程式的執行,強行退出JVM

注意:方法定義的先後順序沒有關係,方法定義在類體中,但是在java語言中所有的方法體中的程式碼都必須遵循自上而下的順序依次逐行執行。

方法呼叫的時候,該方法需要記憶體空間,在棧中分配,而且方法只有在呼叫的時候才會在棧中分配空間,並且呼叫時就是壓棧,分配空間,方法執行結束後,該方法需要的空間就會釋放,此時發生彈棧動作

方法呼叫時引數的傳遞問題:

引數傳遞的時候,和型別無關,不管是基本資料型別還是引用資料型別,統一都是將變數(盒子)中儲存的那個值複製一份,傳遞下去,但是這個值可能是一個數字100,也可能是物件的記憶體地址(記憶體地址也是一個值),就一句話:不管是哪一種資料型別的傳遞,都是將變數中儲存的那個值複製一份傳遞過去。

註解:棧中儲存方法執行需要的記憶體,以及棧中儲存方法的區域性變數

區域性變數有一個特點:方法結束之後,區域性變數佔用的記憶體會自動釋放

注意:程式開始執行的時候是先執行main方法。因為main方法是程式入口,main方法不需要程式設計師手動呼叫,是由JVM呼叫的,但是除了main方法其他方法都需要程式設計師手動呼叫才能被執行。在使用方法時,自定義的方法可以呼叫main方法,但是沒有意義,容易出現無限呼叫,一個方法不能再另外一個方法裡宣告(方法與方法之間關係是平級關係)

方法過載(overload)

什麼情況下考慮使用方法過載機制?

當多個方法功能相似的時候,建議將方法名定義為一致的,這樣程式碼美觀,又方便程式設計(容易記憶,方便使用)

注意:方法過載不能隨便使用,如果功能不相似,就不要使用

滿足什麼條件的時候構成了方法過載?

  1. 在同一個類中
  2. 方法名相同
  3. 形式引數列表不同(引數個數不同,引數資料型別不同,引數順序不同)

方法過載優點:程式碼美觀、方便程式碼的編寫

方法遞迴

什麼是方法遞迴?

方法自身呼叫自身。

注意:使用遞迴的時候,必須新增結束條件,沒有結束條件,會發生棧記憶體溢位錯誤。但是當遞迴有結束條件,並且結束條件合法的時候,也可能會發生棧記憶體溢位錯誤。原因:遞迴太深,棧記憶體不夠了

棧記憶體溢位錯誤:StackOverflowError,原因:棧記憶體不夠

方法遞迴簡單例子:

 1 public class Test {
 2     public static void main(String[] args) {
 3         int add = add(10);
 4         System.out.println(add);
 5     }
 6     public static int add(int n) {
 7         if (n ==1) {
 8             return 1;
 9         }
10         return n +add(n - 1);    
11     }
12 }