Java 方法調用

在調用方法時,程序的執行流程會進入方法的內部,當執行到方法內部的return語句或執行完方法內部的代碼以後,則返回到調用該方法的位置繼續向下執行。

方法調用的語法分爲以下兩種:

(1)一個類內部的方法調用:指調用以及被調用的方法都在一個類的內部。 

(2)不同類之間的方法調用:指調用以及被調用的方法位於不同的類內部。


(1)一個類內部方法調用語法

  在進行方法調用時,調用的語法格式和static修飾符有關,所以按照一個方法在聲明時是否有static修飾分爲兩類:

(1)有static修飾的稱作靜態方法(2)沒有static修飾的稱作非靜態方法

這樣一個類內部的方法調用就存在四種情況:

a在非靜態方法內部調用非靜態方法

b在非靜態方法內部調用靜態方法

c在靜態方法內部調用靜態方法

d在靜態方法內部調用非靜態方法

其中前三種情況的調用都是直接調用,直接調用的語法格式爲:

方法名(參數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方法時,則使用對象名.方法名調用對應的方法,這裏參數的規則和上面介紹的相同。

(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

從程序執行的輸出就可以清晰的看出方法調用時代碼的執行順序


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章