Java學習筆記4(方法),java學習筆記4方法
方法和c++中的函數類似,區別在於java的方法定義不限位置,而c++中的定義在主函數後面的函數調用前要聲明:
求矩形面積方法樣本:
public class MethodDemo{ public static void main(String[] args){ int area = getArea(5,6); System.out.println("面積是:"+area); } public static int getArea(int w, int h){ return w * h; }}
輸出:面積是:30
調用過程分析:
1.從main進入,開始執行程式
2.調用getArea方法,傳遞參數,得到傳回值
3.輸出
調用過程記憶體分析:
1.程式運行時期,必須進入記憶體,運行檔案:編譯後的class檔案進入記憶體
2.class檔案進入方法區
3.main方法進棧運行
4.getArea方法進棧運行
5.計算結果返回給調用者
6.getArea方法運行結束,出棧,釋放記憶體資源
7.main輸出後,出棧,釋放記憶體資源,程式結束
注意事項:
1.方法不能定義在另一個方法內
2.方法名嚴格區分大小寫
3.參數不能少傳或多傳,類型一致
4.return代表結束,不可以在return下面繼續寫,傳回型別一致
方法重載:
具體的重載的概念就不介紹了,這裡實現一個最簡單的重載
public class MethodDemo{ public static void main(String[] args){ int sum = getSum(2,3,1); System.out.println(sum); } public static int getSum(int a, int b){ System.out.println("int+int"); return a+b; } public static int getSum(int a, int b, int c){ System.out.println("int+int+int"); return a+b+c; } public static double getSum(double a, double b){ System.out.println("double+double"); return a+b; }}
再來一個痛點:
public class MethodDemo{ public static void main(String[] args){ int[] arr = {1,2,3,4}; System.out.println(arr[2]);//3 change(arr); System.out.println(arr[2]);//100 } public static void change(int[] arr){ arr[2] = 100; }}
解釋:
1.main方法進棧運行
2.在堆中開空間放入數組ARR並賦值
3.數組首地址傳給棧中的ARR,即ARR指向存有這個數組的記憶體空間
4.調用change傳遞的參數方法實際上是記憶體位址,change中的ARR變數的地址和main中的ARR地址相同
5.在change方法運行結束後釋放記憶體,但是通過地址改變的arr[2]徹底變了
通俗地理解:多個人合租房子,都拿到房屋地地址,某個人進入房子裝修,以後進入的人看見的都是裝修後的房子