java學習(六)方法
目標:掌握方法如何調用;理解棧數據結構;理解方法執行過程中內存是如何變化的;掌握方法的重載機制;掌握方法遞歸算法。
方法定義與調用
代碼示例----無返回值
public class MethodTest_01{ public static void main(String[] args) { MethodTest_01.sumInt(100, 200); //調用方法sumInt MethodTest_01.sumDouble(6.0, 8.0); //調用方法sumDouble } public static void sumInt(int x , int y){ System.out.println(x + "+" + y + "=" + (x + y)); } public static void sumDouble(double a , double b){ System.out.println(a + "+" + b + "=" + (a + b)); } }
代碼解釋:
-
[修飾符列表] ,目前大家統一寫成 public static
-
如果一個方法執行結束之後不準備返回任何數據,則返回值類型必須寫 void
-
方法名,遵循駝峯命名方式
-
形式參數列表(int x, int y)
-
方法體,由一對兒大括號括起來,在形參的後面
代碼示例----接收返回值
public class MethodTest_02{ public static void main(String[] args) { //可以編譯也可以正常運行 sumInt(10 , 20); //調用sumInt方法 int retValue = sumInt(100 , 200); //接收返回值,變量的數據類型和返回值類型要一致哦 System.out.println("計算結果 = " + retValue); //打印變量的值 //編譯報錯,返回值類型是 int,不能採用 byte 接收 //byte retValue2 = sumInt(1 , 2); } public static int sumInt(int a , int b){ return a + b; } }
棧,又稱堆棧,先進後出原則
-
什麼時候壓棧?定義方法只是將代碼存儲在方法內並不會在棧內存中給分配空間,只有調用方法的時候,java虛擬機纔會在“棧內存”中給該方法分配空間,此時發生壓棧動作
-
什麼時候彈棧?這個方法執行結束的時候,這個方法在棧內存中所對應的活動空間就會釋放掉,此時發生彈棧動作。
代碼執行順序
public class MethodTest_03{ public static void main(String[] args) { System.out.println("main begin"); m1(); System.out.println("main over"); } public static void m1() { System.out.println("m1 begin"); m2(); System.out.println("m1 over"); } public static void m2() { System.out.println("m2 begin"); System.out.println("m2 over"); } }
main begin 先將main方法壓棧,輸出main begin,後面代碼在main棧底部
m1 begin 再將m1方法壓棧,輸出m1 begin,後面代碼再m1棧底部
m2 begin 再將m2方法壓棧,此時m2方法棧在棧頂部 ,先輸出 m2 begin
m2 over 再輸出m2 over ,彈出m2棧
m1 over 此時m1棧在棧頂,輸出m1 over,彈出m1棧
main over 此時棧內只有一個main棧,輸出main over,彈出。執行到此棧空了,程序執行完成。
方法重載:什麼是方法重載?什麼情況下我們考慮使用 方法重載?
方法重載(overload)是指在一個類中定義多個同名的方法, 但要求每個方法具有不同的參數的類型或參數的個數。調用重載方法時,Java 編譯器能通過檢 查調用的方法的參數類型和個數選擇一個恰當的方法。
代碼滿足以下3個條件就會方法重載
-
在同一個類當中。
-
方法名相同。
-
參數列表不同:個數不同算不同,順序不同算不同,類型不同也算不同。