方法和c++中的函數類似,區別在於java的方法定義不限位置,而c++中的定義在主函數後面的函數調用前要聲明: 求矩形面積方法示例: 輸出:面積是:30 調用過程分析: 1.從main進入,開始執行程式 2.調用getArea方法,傳遞參數,得到返回值 3.輸出 調用過程記憶體分析: 1.程式運行時期 ...
方法和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]徹底變了
通俗地理解:多個人合租房子,都拿到房屋地地址,某個人進入房子裝修,以後進入的人看見的都是裝修後的房子