Method
1 呼叫和宣告
上章節有講過方法如何呼叫及宣告方法,以下再回顧一次
ObjectName.functionName( parameter );
taxi.car_break();
-----------------
Taxi煞車中
2 返回型態
2-1宣告返回型態
//返回值void的意思即是沒有返回值
public void sayHello(){
System.out.println("Hello");
}
//返回值int表示會reurn一個int型態的值
public int subtract(int x,int y){
return x-y;
}
//返回值String表示會reurn一個String型態的值
public String Hello(){
return "Hello";
}
除了void之外,其他返回值都需要使用return,不然會有編譯錯誤
2-2 接收返回值
比較看看若要列印出Hello,使用sayHello()與Hello()差異在哪裡
sayHello();
String s=Hello();
System.out.println(s);
---------------------
Hello
Hello
- 第一行Hello : sayHello()列印出的hello
- 第二行Hello : 先從hello()取得return回來的string,將其值丟入String s裡,再將s列印出來
3 傳值呼叫vs傳參考呼叫
3-1 傳值呼叫
//PURPOSE:Plus1_CallByValue傳值呼叫
public class MainClass {
public static void main(String[] args) {
int a=1;
Plus1_CallByValue(a);
System.out.println("a="+a);
}
public static void Plus1_CallByValue(int a){
a++;
}
}
--------------------------------
a=1
只要function的參數為基本型態,就會使用傳值呼叫
傳值呼叫顧名思義,他就是只傳了值過去而已
public static void Plus1(int a){....}
還記得我說過一個變數存活的範圍,只有包住變數最內層的{ }而已,所以雖然下面的變數跟上面的變數都叫做a,但他們指的是不同的東西,所以最後當我們列印上面的a時,他並沒有被加1
3-2 傳參考呼叫
//PURPOSE:Plus2_CallByReference傳參考呼叫
public class MainClass {
public static void main(String[] args) {
int[] array=new int[1];
array[0]=1;
Plus2_CallByReference(array);
System.out.println("array[0]="+array[0]);
}
public static void Plus2_CallByReference(int[] array2){
array2[0]++;
}
}
------------------------------
array[0]=2
只要function的參數為物件型態,就會使用傳參考呼叫
以上述程式碼為例,將陣列array傳入Plus2_CallByReference(),他有了一個新的名字array2,若我們將array2[0]++,array[0]也會被++,原因在於這時的array2其實指的就是我們傳進來的array
同樣是進行++,可以比較一下上面傳值呼叫與下面傳參考呼叫差異性在哪