如何在 Java 中使用方法
Java 中的方法(在許多其他編程語言中稱為「函數」)是被組合在一起並標記為可重用的一塊代碼。方法很有用,因為它們允許你在不重寫相同代碼的情況下,執行相同的操作或一系列操作,這不僅意味著你的工作量減少,還意味著出現問題時需要維護和調試的代碼減少。
方法存在於類中,因此標準 Java 樣板代碼適用:
package com.opensource.example;
public class Example {
// 在此寫代碼
}
在這樣一個簡單的單文件應用程序中,包定義並不是絕對必要的,但它是一個很好的習慣,而且大多數 IDE 都強制執行它。
默認情況下,Java 會尋找在類中運行的 main
方法。方法可以是公有的或私有的,也可以是靜態的或非靜態的,但 main
方法必須是公有的、靜態的,Java 編譯器才能識別和使用它。當方法是公有的時,它可以從類外部執行。要在程序啟動時調用 Example
類,其 main
方法必須是可訪問的,因此將其設置為 public
。
下面是兩個方法的簡單演示:一個 main
方法在調用 Example
類時默認執行,另一個 report
方法接受 main
的輸入並執行簡單操作。
為了模擬任意數據輸入,我使用了 if
-then
語句,該語句根據你啟動應用程序的時間在兩個字元串之間進行選擇。換句話說,main
方法首先設置一些數據(在現實生活中,這些數據可以來自用戶輸入,也可以來自應用程序其他地方的其他方法),然後 「調用」 report
方法,將處理後的數據作為輸入提供:
package com.opensource.example;
public class Example {
public static void main(String[] args) {
// 生成一些數據
long myTime = System.currentTimeMillis();
String weather;
if ( myTime%2 == 0 ) {
weather = "party";
} else {
weather = "apocalypse";
}
// 調用其他方法
report(weather);
}
private static void report(String day) {
System.out.printf("Welcome to the zombie %sn", day);
}
}
運行代碼:
$ java ./Example.java
Welcome to the zombie apocalypse
$ java ./Example.java
Welcome to the zombie party
請注意,同一 report
方法有兩個不同的結果。當然,在這個簡單的演示中,不需要第二種方法。模擬數據生成的 if
-then
語句可能生成了相同的結果。但是,當一個方法執行一項複雜的任務時,比如將圖像調整為縮略圖,然後使用調整後的圖像在屏幕上生成小部件,那麼附加組件的「費用」就很有意義了。
何時使用 Java 方法
很難知道何時使用方法,何時只將數據發送到 Java 流 或循環中。如果你面臨這個決定,答案通常是使用一種方法。原因如下:
- 方法開銷少。它們不會給代碼增加處理開銷。
- 方法減少代碼的行數。
- 方法是特定的。查找名為
resizeImage
的方法通常比查找隱藏在從驅動器載入圖像的函數中某個循環中的代碼更容易。 - 方法是可重用的。當你第一次編寫方法時,你可能會 認為 它只對應用程序中的一個任務有用。然而,隨著應用程序的編寫,你可能會發現自己正在使用一種你認為「已完成」的方法。
函數式編程與面向對象編程
函數式編程利用方法作為執行任務的主要構造。創建一個方法,該方法接受一種數據,處理該數據,並輸出新數據。將許多方法串在一起,你就擁有了一個動態且功能強大的應用程序。像 C 和 Lua 這樣的編程語言就是這種編碼風格的例子。
用代碼完成任務的另一種方式是 Java 使用的面向對象模型。在面向對象編程中,方法是模板的組成部分。你可以創建對象,而不是將數據從一個方法發送到另一個方法,並可以通過使用它們的方法來更改它們。
從面向對象的角度來看,這是一個簡單的 「殭屍末日」 演示程序。在函數方法中,我使用一種方法生成數據,另一種方法使用該數據執行操作。面向對象的等價物是具有表示工作單元的類。這個示例應用程序向用戶顯示一條當天的消息,宣布這一天會有殭屍派對或是殭屍末日。編寫一個「天」對象,然後查詢該對象以了解其特性是有意義的。作為演示面向對象構造的不同方面的借口,新的示例應用程序還將統計有多少殭屍出現在派對上(或末日)。
Java 為每個類使用一個文件,因此要創建的第一個文件是 Day.Java
,它用作 Day
對象:
package com.opensource.example;
import java.util.Random;
// 類
public class Day {
public static String weather;
public int count;
// 構造方法
public Day() {
long myTime = System.currentTimeMillis();
if ( myTime%2 == 0 ) {
weather = "paradise";
} else {
weather = "apocalypse";
}
}
// 方法
public String report() {
return weather;
}
public int counter() {
Random rand = new Random();
count = count + rand.nextInt(100);
return(count);
}
}
在「類」部分中,創建了兩個域:天象 weather
和計數 count
。weather
是靜態的。在一天的過程中(在這種假想的情況下),weather
不會改變。要麼是派對 paradise
,要麼是末日 apocalypse
,持續了一整天。然而,殭屍的數量在一天中會增加。
在「構造方法」部分,確定當天的天象。它是作為一個 構造方法 完成的,因為它只在類最初被調用時發生一次。
在「方法」部分,report
方法只返回由構造方法確定和設置的天象報告。然而,counter
方法生成一個隨機數,並將其添加到當前殭屍計數中。
換句話說,這個類做了三件不同的事情:
- 表示應用程序定義的「天」。
- 設置當天不變的天氣報告。
- 設置一天中不斷增加的殭屍數量。
要使用這所有,請創建第二個文件:
package com.opensource.example;
public class Example {
public static void main(String[] args) {
Day myDay = new Day();
String foo = myDay.report();
String bar = myDay.report();
System.out.printf("Welcome to a zombie %sn", foo);
System.out.printf("Welcome to a zombie %sn", bar);
System.out.printf("There are %d zombies out today.n", myDay.counter());
System.out.printf("UPDATE: %d zombies. ", myDay.counter());
System.out.printf("UPDATE: %d zombies. ", myDay.counter());
}
}
因為現在有兩個文件,所以使用 Java IDE 運行代碼是最簡單的,但是如果不想使用 IDE,可以創建自己的 JAR 文件。運行代碼以查看結果:
Welcome to a zombie apocalypse
Welcome to a zombie apocalypse
There are 35 zombies out today.
UPDATE: 67 zombies. UPDATE: 149 zombies.
無論調用 report
方法多少次,weather
都保持不變,但調用 counter
方法的次數越多,殭屍的數量就會增加。
Java 方法
方法(或函數)是編程中的重要組成。在 Java 中,你可以將它們作為函數式編程的單個類的一部分使用,也可以在面向對象編程的類之間使用它們。兩種類型的編程對於解決同一個問題有不同的視角,因此沒有對與錯之分。通過反覆嘗試,積累一點經驗,你會知道哪一個最適合某個特定的問題。
via: https://opensource.com/article/23/1/java-methods
作者:Seth Kenlon 選題:lkxed 譯者:ZhangZhanhaoxiang 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive