如何在 Java 中使用方法

Java 中的方法(在許多其他編程語(yǔ)言中稱為“函數(shù)”)是被組合在一起并標(biāo)記為可重用的一塊代碼。方法很有用,因?yàn)樗鼈冊(cè)试S你在不重寫相同代碼的情況下,執(zhí)行相同的操作或一系列操作,這不僅意味著你的工作量減少,還意味著出現(xiàn)問題時(shí)需要維護(hù)和調(diào)試的代碼減少。
方法存在于類中,因此標(biāo)準(zhǔn) Java 樣板代碼適用:
在這樣一個(gè)簡(jiǎn)單的單文件應(yīng)用程序中,包定義并不是絕對(duì)必要的,但它是一個(gè)很好的習(xí)慣,而且大多數(shù) IDE 都強(qiáng)制執(zhí)行它。
默認(rèn)情況下,Java 會(huì)尋找在類中運(yùn)行的 ??main?? 方法。方法可以是公有的或私有的,也可以是靜態(tài)的或非靜態(tài)的,但 ??main?? 方法必須是公有的、靜態(tài)的,Java 編譯器才能識(shí)別和使用它。當(dāng)方法是公有的時(shí),它可以從類外部執(zhí)行。要在程序啟動(dòng)時(shí)調(diào)用 ??Example?? 類,其 ??main?? 方法必須是可訪問的,因此將其設(shè)置為 ??public??。
下面是兩個(gè)方法的簡(jiǎn)單演示:一個(gè) ??main?? 方法在調(diào)用 ??Example?? 類時(shí)默認(rèn)執(zhí)行,另一個(gè) ??report?? 方法接受 ??main?? 的輸入并執(zhí)行簡(jiǎn)單操作。
為了模擬任意數(shù)據(jù)輸入,我使用了 ??if??-??then?? 語(yǔ)句,該語(yǔ)句根據(jù)你啟動(dòng)應(yīng)用程序的時(shí)間在兩個(gè)字符串之間進(jìn)行選擇。換句話說(shuō),??main?? 方法首先設(shè)置一些數(shù)據(jù)(在現(xiàn)實(shí)生活中,這些數(shù)據(jù)可以來(lái)自用戶輸入,也可以來(lái)自應(yīng)用程序其他地方的其他方法),然后 “調(diào)用” ??report??方法,將處理后的數(shù)據(jù)作為輸入提供:
運(yùn)行代碼:
請(qǐng)注意,同一 ??report?? 方法有兩個(gè)不同的結(jié)果。當(dāng)然,在這個(gè)簡(jiǎn)單的演示中,不需要第二種方法。模擬數(shù)據(jù)生成的 ??if??-??then?? 語(yǔ)句可能生成了相同的結(jié)果。但是,當(dāng)一個(gè)方法執(zhí)行一項(xiàng)復(fù)雜的任務(wù)時(shí),比如將圖像調(diào)整為縮略圖,然后使用調(diào)整后的圖像在屏幕上生成小部件,那么附加組件的“費(fèi)用”就很有意義了。
何時(shí)使用 Java 方法
很難知道何時(shí)使用方法,何時(shí)只將數(shù)據(jù)發(fā)送到 ??Java 流?? 或循環(huán)中。如果你面臨這個(gè)決定,答案通常是使用一種方法。原因如下:
- 方法開銷少。它們不會(huì)給代碼增加處理開銷。
- 方法減少代碼的行數(shù)。
- 方法是特定的。查找名為?
?resizeImage?? 的方法通常比查找隱藏在從驅(qū)動(dòng)器加載圖像的函數(shù)中某個(gè)循環(huán)中的代碼更容易。 - 方法是可重用的。當(dāng)你第一次編寫方法時(shí),你可能會(huì)認(rèn)為它只對(duì)應(yīng)用程序中的一個(gè)任務(wù)有用。然而,隨著應(yīng)用程序的編寫,你可能會(huì)發(fā)現(xiàn)自己正在使用一種你認(rèn)為“已完成”的方法。
函數(shù)式編程與面向?qū)ο缶幊?/h3>
函數(shù)式編程利用方法作為執(zhí)行任務(wù)的主要構(gòu)造。創(chuàng)建一個(gè)方法,該方法接受一種數(shù)據(jù),處理該數(shù)據(jù),并輸出新數(shù)據(jù)。將許多方法串在一起,你就擁有了一個(gè)動(dòng)態(tài)且功能強(qiáng)大的應(yīng)用程序。像 C 和 ??Lua?? 這樣的編程語(yǔ)言就是這種編碼風(fēng)格的例子。
用代碼完成任務(wù)的另一種方式是 Java 使用的面向?qū)ο竽P?。在面向?qū)ο缶幊讨?,方法是模板的組成部分。你可以創(chuàng)建對(duì)象,而不是將數(shù)據(jù)從一個(gè)方法發(fā)送到另一個(gè)方法,并可以通過(guò)使用它們的方法來(lái)更改它們。
從面向?qū)ο蟮慕嵌葋?lái)看,這是一個(gè)簡(jiǎn)單的 “僵尸末日” 演示程序。在函數(shù)方法中,我使用一種方法生成數(shù)據(jù),另一種方法使用該數(shù)據(jù)執(zhí)行操作。面向?qū)ο蟮牡葍r(jià)物是具有表示工作單元的類。這個(gè)示例應(yīng)用程序向用戶顯示一條當(dāng)天的消息,宣布這一天會(huì)有僵尸派對(duì)或是僵尸末日。編寫一個(gè)“天”對(duì)象,然后查詢?cè)搶?duì)象以了解其特性是有意義的。作為演示面向?qū)ο髽?gòu)造的不同方面的借口,新的示例應(yīng)用程序還將統(tǒng)計(jì)有多少僵尸出現(xiàn)在派對(duì)上(或末日)。
Java 為每個(gè)類使用一個(gè)文件,因此要?jiǎng)?chuàng)建的第一個(gè)文件是 ??Day.Java??,它用作 ??Day?? 對(duì)象:
在“類”部分中,創(chuàng)建了兩個(gè)域:天象 ??weather?? 和計(jì)數(shù) ??count??。??weather?? 是靜態(tài)的。在一天的過(guò)程中(在這種假想的情況下),??weather?? 不會(huì)改變。要么是派對(duì) ??paradise??,要么是末日 ??apocalypse??,持續(xù)了一整天。然而,僵尸的數(shù)量在一天中會(huì)增加。
在“構(gòu)造方法”部分,確定當(dāng)天的天象。它是作為一個(gè) ??構(gòu)造方法?? 完成的,因?yàn)樗辉陬愖畛醣徽{(diào)用時(shí)發(fā)生一次。
在“方法”部分,??report?? 方法只返回由構(gòu)造方法確定和設(shè)置的天象報(bào)告。然而,??counter?? 方法生成一個(gè)隨機(jī)數(shù),并將其添加到當(dāng)前僵尸計(jì)數(shù)中。
換句話說(shuō),這個(gè)類做了三件不同的事情:
- 表示應(yīng)用程序定義的“天”。
- 設(shè)置當(dāng)天不變的天氣報(bào)告。
- 設(shè)置一天中不斷增加的僵尸數(shù)量。
要使用這所有,請(qǐng)創(chuàng)建第二個(gè)文件:
因?yàn)楝F(xiàn)在有兩個(gè)文件,所以使用 Java IDE 運(yùn)行代碼是最簡(jiǎn)單的,但是如果不想使用 IDE,可以創(chuàng)建自己的 ??JAR 文件??。運(yùn)行代碼以查看結(jié)果:
無(wú)論調(diào)用 ??report?? 方法多少次,??weather?? 都保持不變,但調(diào)用 ??counter?? 方法的次數(shù)越多,僵尸的數(shù)量就會(huì)增加。
Java 方法
方法(或函數(shù))是編程中的重要組成。在 Java 中,你可以將它們作為函數(shù)式編程的單個(gè)類的一部分使用,也可以在面向?qū)ο缶幊痰念愔g使用它們。兩種類型的編程對(duì)于解決同一個(gè)問題有不同的視角,因此沒有對(duì)與錯(cuò)之分。通過(guò)反復(fù)嘗試,積累一點(diǎn)經(jīng)驗(yàn),你會(huì)知道哪一個(gè)最適合某個(gè)特定的問題。

























