Java編程那些事兒54—方法調用鄭州遊戲學院 陳躍峰出自:http://blog.csdn.net/mailbomb
7.4 方法調用 方法聲明是建立一個新的功能,聲明出來的方法在需要的時候可以通過調用執行該方法的功能,方法只有被調用才能被執行。 在Java程式中有一個基本的main方法,其方法聲明如下: public static void main(String[] args) 該方法包含在開始的代碼架構中,這是一個特殊的方法。Java文法規定,J2SE的代碼都從該方法開始執行,如果一個代碼中沒有main方法,則該代碼不能被直接運行。所以main方法也稱作J2SE程式的入口方法,在運行程式時,自動調用對應代碼中的main方法開始程式的執行。 由於上面講述的原因,所以一個方法如果需要得到執行,則需要直接或間接在main方法中進行調用。 在調用方法時,程式的執行流程會進入方法的內部,當執行到方法內部的return語句或執行完方法內部的代碼以後,則返回到調用該方法的位置繼續向下執行。 方法調用的文法分為以下兩種:l 一個類內部的方法調用指調用以及被調用的方法都在一個類的內部。l 不同類之間的方法調用指調用以及被調用的方法位於不同的類內部。由於類的概念現在還沒有涉及到,所以這裡指講一個類內部的方法調用文法,關於不同類之間的方法調用則在後續的章節中進行介紹。
7.4.1 一個類內部方法調用文法 在前面的代碼架構中,以下代碼就是聲明類的結構: public class 檔案名稱{ 在該聲明後續大括弧內部的代碼,稱作一個類的內部。 在進行方法調用時,調用的文法格式和static修飾符有關,所以按照一個方法在聲明時是否有static修飾分為兩類:l 有static修飾的稱作靜態方法l 沒有static修飾的稱作非靜態方法這樣一個類內部的方法調用就存在四種情況:l 在非靜態方法內部調用非靜態方法l 在非靜態方法內部調用靜態方法l 在靜態方法內部調用靜態方法l 在靜態方法內部調用非靜態方法其中前三種情況的調用都是直接調用,直接調用的文法格式為: 方法名(參數1值,……);這裡方法名為被調用的方法名稱,後續緊跟一對小括弧,括弧內部依次書寫調用該方法時傳入參數的值,文法上要求傳入參數的個數、每個參數的類型都必須和方法聲明時保持一致。而這裡調用的運算式就代表方法的傳回值,可以根據需要使用傳回值進行賦值。範例程式碼如下: public class CallMethod{ public static void main(String[] args){ int a = 10; int b = 2; int c = 3; int d = 32; max(a,b); //只比較,比較以後傳回值丟失 int n = max(5,a); //比較,並把傳回值賦值給變數n int m = max(c,d); //比較,並把傳回值賦值給變數m //比較a、b、c、d四個數位最大值 int maxNumber = max(max(a,b),max(c,d)); } public static int max(int a,int b){ if(a > b){ return a; }else{ return b; } }} 該樣本在靜態main方法內部調用靜態max方法,因為max方法在聲明時參數列表為2個int的參數,則調用的時候必須傳入2個int值,可以是int的變數也可以是int數值。則調用的基本格式為: max(參數值1,參數值2) 調用的運算式可以在代碼中單獨成行,當方法的傳回值類型不是void時,可以接收方法的傳回值,也可以不接收。方法的傳回值是一個確定類型的值,所以在以上比較時,方法調用之間可以進行嵌套。 int maxNumber = max(max(a,b),max(c,d)); 其中max(a,b)是獲得a和b的最大值,max(c,d)是獲得c和d的最大值,然後比較兩個獲得的最大值,該代碼的功能和以下代碼的功能相同: int maxNumber = max(a,max(b,max(c,d))); 總得來說,前三種情況的調用都是使用該種格式。 對於最後一種情況,也就是在靜態方法內部調用非靜態結構在文法上則比較複雜,以下是一個簡單的樣本: public class CallMethod2{ public static void main(String[] args){ CallMethod2 cm = new CallMethod2(); int n = cm.max(1,2); } public int max(int a,int b){ if(a > b){ return a; }else{ return b; } }} 在該代碼涉及的文法格式在後續的代碼中將進行講解,這裡只做簡單的說明。其中: CallMethod2 cm = new CallMethod2(); 該行代碼聲明並建立了一個CallMethod2類型的對象cm。接著的代碼: int n = cm.max(1,2); 在調用max方法時,則使用對象名.方法名調用對應的方法,這裡參數的規則和上面介紹的相同。
7.4.2 方法調用後的執行流程在方法調用時,程式的執行流程和以前的結構就有所區別。簡單說,就是當遇到方法調用時,程式的執行流程將跳轉到被調用的方法內部,直到被調用的方法返回時,才從調用的位置繼續向下執行。以下是一個示範調用過程的範例程式碼: public class CallMethod3{ public static void main(String[] args){ System.out.println(1); printTest(); System.out.println(2); max(10,20); System.out.println(3); } public static int max(int a,int b){ System.out.println("進入max方法內部!"); if(a > b){ return a; }else{ return b; } } public static void printTest(){ System.out.println("進入printTest方法內部!"); int a = 10; System.out.println("printTest方法執行完畢!"); }} 則該代碼執行時的輸出如下: 1進入printTest方法內部!printTest方法執行完畢!2進入max方法內部!3 從程式執行的輸出就可以清晰的看出方法調用時代碼的執行順序。