在前面幾個章節中我們經常使用到 System.out.println(),那麼它是什麼呢?
println() 是一個方法。
System 是系統類。
out 是標準輸出物件。
這句話的用法是呼叫系統類 System 中的標準輸出物件 out 中的方法 println()。
Java方法是語句的集合,它們在一起執行一個功能。
方法是解決一類問題的步驟的有序組合
方法包含於類或物件中
方法在程式中被建立,在其他地方被參照
使程式變得更簡短而清晰
有利於程式維護
可以提高程式開發的效率
提高了程式碼的重用性
修飾符 返回值型別 方法名(參數型別 參數名){
…
方法體
…
return 返回值;
}
方法包含一個方法頭和一個方法體。下面 下麪是一個方法的所有部分:、
修飾符:修飾符,這是可選的,告訴編譯器如何呼叫該方法。定義了該方法的存取型別。
返回值型別 :方法可能會返回值。returnValueType 是方法返回值的數據型別。有些方法執行所需的操作,但沒有返回值。在這種情況下,returnValueType 是關鍵字void。
方法名:是方法的實際名稱。方法名和參數表共同構成方法簽名。
參數型別:參數像是一個佔位符。當方法被呼叫時,傳遞值給參數。這個值被稱爲實參或變數。參數列表是指方法的參數型別、順序和參數的個數。參數是可選的,方法可以不包含任何參數。
方法體:方法體包含具體的語句,定義該方法的功能。
public static int age(int birthday){...}
參數可以有多個:static float interest(float principal, int year){…}
**注意!!! 在一些其它語言中方法指過程和函數。一個返回非void型別返回值的方法稱爲函數;一個返回void型別返回值的方法叫做過程。
下面 下麪的方法包含 2 個參數 num1 和 num2,它返回這兩個參數的最大值。
/** 返回兩個整型變數數據的較大值 */
public static int max(int num1, int num2) {
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
三元運算子:
public static int max(int num1, int num2) {
return num1 > num2 ? num1 : num2;
}
物件.方法名(實參列表);
物件可以是物件名,亦可以是匿名物件,還有可能是this
Java 支援兩種呼叫方法的方式,根據方法是否返回值來選擇。
當程式呼叫一個方法時,程式的控制權交給了被呼叫的方法。當被呼叫方法的返回語句執行或者到達方法體閉括號時候交還控制權給程式。
當方法返回一個值的時候,方法呼叫通常被當做一個值。例如:
int larger = max(30, 40);
如果方法返回值是void,方法呼叫一定是一條語句。例如,方法println返回void。下面 下麪的呼叫是個語句:
System.out.println(「歡迎存取我的部落格」);
###範例
public class TestMax {
/** 主方法 */
public static void main(String[] args) {
int i = 5;
int j = 2;
int k = max(i, j);
System.out.println( i + " 和 " + j + " 比較,最大值是:" + k);
}
/** 返回兩個整數變數較大的值 */
public static int max(int num1, int num2) {
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
}
編譯執行結果:
5 和 2 比較,最大值是:5
這個程式包含 main 方法和 max 方法。main 方法是被 虛擬機器 呼叫的,除此之外,main 方法和其它方法沒什麼區別。
main 方法的頭部是不變的,如例子所示,帶修飾符 public 和 static,返回 void 型別值,方法名字是
main,此外帶個一個 String[] 型別參數。String[] 表明參數是字串陣列。
本節說明如何宣告和呼叫一個 void 方法。
下面 下麪的例子宣告瞭一個名爲 printGrade 的方法,並且呼叫它來列印給定的分數。
public class TestVoidMethod {
public static void main(String[] args) {
printGrade(78.5);
}
public static void printGrade(double score) {
if (score >= 90.0) {
System.out.println('A');
}
else if (score >= 80.0) {
System.out.println('B');
}
else if (score >= 70.0) {
System.out.println('C');
}
else if (score >= 60.0) {
System.out.println('D');
}
else {
System.out.println('F');
}
}
}
編譯執行結果:C
這裏printGrade方法是一個void型別方法,它不返回值。
一個void方法的呼叫一定是一個語句。 所以,它被在main方法第三行以語句形式呼叫。就像任何以分號結束的語句一樣。
該程式建立一個方法,該方法用於交換兩個變數。
java
public class TestPassByValue {
public static void main(String[] args) {
int num1 = 1;
int num2 = 2;
System.out.println("交換前 num1 的值爲:" +
num1 + " ,num2 的值爲:" + num2);
// 呼叫swap方法
swap(num1, num2);
System.out.println("交換後 num1 的值爲:" +
num1 + " ,num2 的值爲:" + num2);
}
/** 交換兩個變數的方法 */
public static void swap(int n1, int n2) {
System.out.println("\t進入 swap 方法");
System.out.println("\t\t交換前 n1 的值爲:" + n1
+ ",n2 的值:" + n2);
// 交換 n1 與 n2的值
int temp = n1;
n1 = n2;
n2 = temp;
System.out.println("\t\t交換後 n1 的值爲 " + n1
+ ",n2 的值:" + n2);
}
}
結果:
交換前 num1 的值爲:1 ,num2 的值爲:2
進入 swap 方法
交換前 n1 的值爲:1,n2 的值:2
交換後 n1 的值爲 2,n2 的值:1
交換後 num1 的值爲:1 ,num2 的值爲:2
上面使用的max方法僅僅適用於int型數據。但如果你想得到兩個浮點型別數據的最大值呢?
解決方法是建立另一個有相同名字但參數不同的方法,如下面 下麪程式碼所示:
public static double max(double num1, double num2) {
if (num1 > num2)
return num1;
else
return num2;
}
多型的體現之一:同一個類當中,多個同名方法,不同的實現
如果你呼叫max方法時傳遞的是int型參數,則 int型參數的max方法就會被呼叫;
如果傳遞的是double型參數,則double型別的max方法體會被呼叫,這叫做方法過載;
就是說一個類的兩個方法擁有相同的名字,但是有不同的參數列表。
Java編譯器根據方法簽名判斷哪個方法應該被呼叫。
方法過載可以讓程式更清晰易讀。執行密切相關任務的方法應該使用相同的名字。
過載的方法必須擁有不同的參數列表。你不能僅僅依據修飾符或者返回型別的不同來過載方法。