在本教程中,您將借助示例學(xué)習(xí)Java方法,如何定義方法以及如何在Java程序中使用方法。
在數(shù)學(xué)中,我們可能已經(jīng)研究過函數(shù)。例如,f(x) = x2x 是一個(gè)返回平方值的函數(shù)。
If x = 2, then f(2) = 4 If x = 3, f(3) = 9 and so on.
同樣,在計(jì)算機(jī)編程中,函數(shù)是執(zhí)行特定任務(wù)的代碼塊。
在面向?qū)ο蟮木幊讨?,該方法是用于函?shù)的術(shù)語(yǔ)。方法綁定到類,并且它們定義類的行為。
在學(xué)習(xí)方法之前,請(qǐng)確保了解Java類和對(duì)象。
根據(jù)用戶定義的方法還是標(biāo)準(zhǔn)庫(kù)中可用的方法,Java中有兩種方法:
標(biāo)準(zhǔn)庫(kù)方法
用戶定義的方法
標(biāo)準(zhǔn)庫(kù)方法是Java中的內(nèi)置方法,可以隨時(shí)使用。這些標(biāo)準(zhǔn)庫(kù)與Java類庫(kù)(JCL)一起出現(xiàn)在JVM和JRE的Java歸檔文件(*.jar)中。
例如,
print() - 是java.io.PrintSteam的一個(gè)方法。print("…")方法用引號(hào)打印字符串。
sqrt() - 是數(shù)學(xué)課的一種方法。它返回一個(gè)數(shù)字的平方根。
這是一個(gè)工作示例:
public class Main { public static void main(String[] args) { //使用sqrt()方法 System.out.print("4的平方根是: " + Math.sqrt(4)); } }
輸出:
4的平方根是: 2.0
我們還可以創(chuàng)建自己選擇的方法來執(zhí)行某些任務(wù)。這種方法稱為用戶定義方法。
這是我們?nèi)绾斡肑ava創(chuàng)建方法的方法:
public static void myMethod() { System.out.println("我的函數(shù)"); }
在這里,我們創(chuàng)建了一個(gè)名為myMethod()的方法。我們可以看到,我們?cè)诜椒笆褂昧藀ublic、static和void。
public - 訪問修飾符。這意味著可以從任何地方訪問該方法。要了解更多信息,請(qǐng)?jiān)L問Java訪問修飾符
static - 這意味著可以在沒有任何對(duì)象的情況下訪問該方法。要了解更多信息,請(qǐng)?jiān)L問Java靜態(tài)關(guān)鍵字。
void - 這意味著該方法不返回任何值。我們將在本教程的后面部分進(jìn)一步了解此內(nèi)容。
這是我們?nèi)绾蝿?chuàng)建方法的簡(jiǎn)單示例。但是,Java中方法定義的完整語(yǔ)法為:
modifier static returnType nameOfMethod (parameters) { // method body }
這里,
modifier - 它定義訪問方法是公共方法,私有方法等。
static - 如果使用static關(guān)鍵字,則無(wú)需創(chuàng)建對(duì)象即可對(duì)其進(jìn)行訪問。
例如,sqrt()標(biāo)準(zhǔn)Math類的方法是靜態(tài)的。因此,我們可以直接調(diào)用Math.sqrt()而無(wú)需創(chuàng)建Math類的實(shí)例。
returnType - 它指定方法返回的值的類型。例如,如果方法具有int返回類型,則它返回整數(shù)值。
一種方法,可以返回原始數(shù)據(jù)類型(int,float,double等),原生對(duì)象(String,Map,List等),或任何其他的內(nèi)置和用戶定義的對(duì)象。
如果該方法未返回值,則其返回類型為void。
nameOfMethod - 它是一個(gè)標(biāo)識(shí)符,用于引用程序中的特定方法。
我們可以給方法起任何名字。但是,以它執(zhí)行的任務(wù)命名是更常規(guī)的做法。例如calculateArea(),display()等。
parameters (arguments) - 這些是傳遞給方法的值。我們可以將任意數(shù)量的參數(shù)傳遞給方法。
method body - 它包括用于執(zhí)行某些任務(wù)的編程語(yǔ)句。方法主體包含在花括號(hào)內(nèi){ }。
現(xiàn)在我們知道了如何定義方法,我們需要學(xué)習(xí)使用它們。為此,我們必須調(diào)用該方法。這是如何做
myMethod();
該語(yǔ)句調(diào)用myMethod()先前聲明的方法。
在執(zhí)行程序代碼時(shí),它在代碼中遇到myFunction()。
然后執(zhí)行分支到myFunction()方法并在方法體內(nèi)部執(zhí)行代碼。
在方法體執(zhí)行之后,程序返回到原始狀態(tài),并在方法調(diào)用后執(zhí)行下一個(gè)語(yǔ)句。
讓我們看看如何在Java程序中使用方法。
class Main { public static void main(String[] args) { System.out.println("即將遇到一種方法。"); //調(diào)用方法 myMethod(); System.out.println("方法已成功執(zhí)行!"); } // method definition private static void myMethod(){ System.out.println("從myMethod()內(nèi)部打印!"); } }
輸出:
即將遇到一種方法。 從myMethod()內(nèi)部打印! 方法已成功執(zhí)行!
在上述程序中,我們有一個(gè)名為myMethod()的方法。該方法不接受任何參數(shù)。同樣,該方法的返回類型為void(意味著不返回任何值)。
在這里,方法是static。因此,我們?cè)谖磩?chuàng)建類的對(duì)象的情況下調(diào)用了該方法。
再來看一個(gè)實(shí)例
class Main { public static void main(String[] args) { //創(chuàng)建Output類的對(duì)象 Output obj = new Output(); System.out.println("即將遇到一個(gè)方法。"); //調(diào)用Output類的myMethod() obj.myMethod(); System.out.println("方法已成功執(zhí)行!"); } } class Output { //public:這個(gè)方法可以從類外部調(diào)用 public void myMethod() { System.out.println("從myMethod()內(nèi)部打印。"); } }
輸出:
即將遇到一個(gè)方法。 從myMethod()內(nèi)部打印。 方法已成功執(zhí)行!
在上面的示例中,我們創(chuàng)建了一個(gè)名為myMethod()的方法。該方法位于名為Output的類中。
由于方法不是static,因此使用obj類的對(duì)象調(diào)用該方法。
obj.myMethod();
如前所述,Java方法可以具有零個(gè)或多個(gè)參數(shù)。并且,它也可能返回一些值。
讓我們以有返回值的方法為例。
class SquareMain { public static void main(String[] args) { int result; //調(diào)用方法并存儲(chǔ)返回值 result = square(); System.out.println("10的平方值是: " + result); } public static int square() { //return 語(yǔ)句 return 10 * 10; } }
輸出:
10的平方值是: 100
在以上程序中,我們創(chuàng)建了一個(gè)名為square()的方法。此方法不接受任何參數(shù),并返回值為10 *10。
在這里,我們提到的方法的返回類型為int。因此,該方法應(yīng)始終返回整數(shù)值。
如我們所見,此方法的范圍是有限的,因?yàn)樗偸欠祷叵嗤闹怠,F(xiàn)在,讓我們修改上面的代碼片段,以使它始終返回傳遞給該方法的任何整數(shù)的平方值,而不是始終返回10的平方值。
public class Main { public static void main(String[] args) { int result, n; n = 3; result = square(n); System.out.println("3的平方是: " + result); n = 4; result = square(n); System.out.println("4的平方是: " + result); } // 方法 static int square(int i) { return i * i; } }
輸出:
3的平方是: 9 4的平方是: 16
在此,square()方法接受一個(gè)參數(shù)i并返回i的平方。返回的值存儲(chǔ)在變量result中。
如果我們傳遞任何其他數(shù)據(jù)類型,而不是int類型的值,則編譯器將引發(fā)錯(cuò)誤。這是因?yàn)镴ava是一種強(qiáng)類型語(yǔ)言。
在方法調(diào)用期間傳遞給getSquare()方法的參數(shù)n稱為實(shí)際參數(shù)。
result = getSquare(n);
方法定義接受的參數(shù)稱為形式參數(shù)。形式參數(shù)的類型必須顯式類型化。
public static int square(int i) {...}
我們還可以使用逗號(hào)將多個(gè)參數(shù)傳遞給Java方法。例如,
public class Main { //方法定義 public static int getIntegerSum (int i, int j) { return i + j; } // 方法定義 public static int multiplyInteger (int x, int y) { return x * y; } public static void main(String[] args) { //調(diào)用方法 System.out.println("10 + 20 = " + getIntegerSum(10, 20)); System.out.println("20 x 40 = " + multiplyInteger(20, 40)); } }
輸出:
10 + 20 = 30 20 x 40 = 800
注意: 實(shí)際參數(shù)和形式參數(shù)的數(shù)據(jù)類型應(yīng)匹配,即第一個(gè)實(shí)際參數(shù)的數(shù)據(jù)類型應(yīng)與第一個(gè)形式參數(shù)的數(shù)據(jù)類型相匹配。同樣,第二個(gè)實(shí)際參數(shù)的類型必須與第二個(gè)形式參數(shù)的類型相匹配,以此類推。
1.主要優(yōu)點(diǎn)是代碼可重用性。我們可以編寫一次方法,并多次使用它。我們不必每次都重寫整個(gè)代碼。可以將其視為“一次編寫,多次重用”。例如,
public class Main { //方法定義 private static int getSquare(int x){ return x * x; } public static void main(String[] args) { for (int i = 1; i <= 5; i++) { //方法調(diào)用 int result = getSquare(i); System.out.println("" + i + " 的平方是: " + result); } } }
輸出:
1 的平方是: 1 2 的平方是: 4 3 的平方是: 9 4 的平方是: 16 5 的平方是: 25
在上面的程序中,我們創(chuàng)建了一個(gè)名為getSquare()的方法來計(jì)算數(shù)字的平方。這里,用同樣的方法計(jì)算小于6的數(shù)的平方。
因此,我們反復(fù)使用相同的方法
方法2使代碼更易讀,更易于調(diào)試。例如,getSquare()方法可讀性很強(qiáng),因此我們可以知道這個(gè)方法將計(jì)算一個(gè)數(shù)字的平方。