在 Java 中,應用程式由類別組成。類別又由變數組成。它們負責儲存對類別的行為負責的資料和方法:換句話說,它可以提供的邏輯(例如,處理一些資料、呼叫其他方法等)。我們可以將這些組件作為變數討論很長時間,但這不是我們今天聚集在一起的原因。我們最好把類別的這樣一個元件當作方法來討論。 方法是在類別中聲明的命名程式碼區塊。它包含旨在解決可重複使用的單獨問題的特定完整操作序列(指令)。換句話說,方法就是函數:您的類別可以執行的操作。其他語言也有函數。僅在 Java 中,它們是類別的成員,並且根據 OOP 術語,稱為方法。但在繼續之前,讓我們先來看一個小例子:
public String constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
System.out.println(resultSentence);
return resultSentence;
}
這裡沒有什麼複雜的:一個 Java 方法,其任務是產生一個帶有我們傳遞給它的名稱的問候字串。例如 -Hello world! My name is Bobby
讓我們透過查看方法聲明中的每個關鍵字(從左到右)來正確理解方法的構造。我們的第一個關鍵字是public
,它表示存取修飾符:
存取修飾符
它們指示類別成員允許的可見範圍,即允許使用變數或方法的位置的限制。 Java 中使用以下存取修飾符:-
公共:公共。帶有此修飾符的方法或欄位是公共的,對當前套件和外部包中的其他類別(或更確切地說,它們的方法和欄位)可見。這是已知的最廣泛的訪問級別;
-
protected:帶有此修飾符的方法或變數可以從當前類別或套件中的任何位置訪問,或在繼承該修飾符的類別中,以及方法或欄位中訪問,即使它們位於其他套件中
protected String constructHelloSentence(String name) {...}
-
預設修飾符。如果類別欄位或方法沒有修飾符,則套用預設修飾符。在這種情況下,欄位或方法對目前套件中的所有類別都可見(如protected,但在繼承時不可見)。
String constructHelloSentence(String name) {...}
-
private :與public修飾符相反。具有此類修飾符的方法或變數僅在聲明它的類別中可用。
private String constructHelloSentence(String name) {...}
String
方法簽名(方法的第一行描述其屬性)。
傳回值
傳回值是呼叫後出現在其位置的資料(方法執行的某些結果)。每個方法都有一個回傳值。或不?傳回值方法
該值可以是任何類型的資料:簡單類型的變數或引用類型。在此範例中,我們指示該方法必須傳回類型為 的對象String
,正如我們所記得的,它是一個描述字串的類別。這裡的第二點是這個字return
。它與返回值有直接關係:它後面的值將被發送回調用該方法的地方,然後該方法本身將return
關閉。這個字通常出現在方法的最後一行(除了具有各種分支的方法,如if, else..
.)。如果您將程式碼寫在下面的下一行return
:
private String constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
return resultSentence;
System.out.println(resultSentence);
}
然後我們會從編譯器得到curses,這不太好(編譯器不會推薦廢話)。您還需要記住,後面的資料類型с
必須與方法簽章中聲明的資料類型相符。return
閱讀更多有關此處的資訊。
空白
它在Java中有何用途void
?並非所有方法都有回傳值。有些人要么什麼都沒有,要么不需要歸還任何東西。那該怎麼辦呢?然後在方法簽名中我們寫入void
. 如果沒有回傳值,我們的方法會是什麼樣子?
protected void constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
System.out.println(resultSentence);
}
您可能注意到,隨著返回值,return
“So it is”一詞也消失了,因為我們的方法不應該返回任何內容。不過,可以放在這裡,但沒有任何意義,只有return
;在最後一行。這通常是無用的,因此void
在方法中它是可選的。但是,它可以在您想要立即退出方法的方法中很有用void
,例如分支或循環。接下來在方法聲明中我們有constructHelloSentence
。
方法名稱
constructHelloSentence
- 方法的名稱,這是我們可以區分一種或另一種方法的顯著特徵。並且相應地調用一種或另一種方法。 方法名必須以小寫字母開頭,同時也使用駝峰式大小寫(CamelCase,駝峰式大小寫):即 名稱中的每個下一個單字都與前一個單字相鄰,並且用大寫字母書寫。方法名稱應該描述該方法(最好的註釋是正確的命名)。為此,請使用動詞或動詞組合:getCat
、delete
、createCar
等。在一個類別中,方法名稱必須是唯一的(不包括方法重載,我們稍後會討論)。讓我們進一步看看我們正在分析的方法,看看 ( String name
)
方法參數
方法可能(也可能沒有)具有來自外部的某些數據,即來自呼叫該方法的位置的數據。在我們的例子中,我們看到一個String
帶有名稱的類型物件到達name
,稍後我們在我們的方法中使用這個變數。您可以在方法中使用無限數量的參數,但不建議超過 7 個。當我們不知道元素的確切數量,但所有這些元素都出於相同目的並且具有相同類型(例如,String
)時,將使用省略號:
public void constructHelloSentence(String...name) {
...
}
每個元素的吸引力是這樣的:name[0]
它讓你想起什麼了嗎?沒錯,就是數組!如果我們這樣寫,什麼都不會改變:
protected void constructHelloSentence(String[] name) {
...
}
對元素的存取也將採用以下形式:name[1]
還有一件事。方法參數可以是最終的:
public String constructHelloSentence(final String name) {
...
}
這意味著名稱引用綁定到特定物件String
並且不能被覆蓋。final
您可以在材料「 Java 中的引用資料類型」中了解有關使用引用變數及其與保留字的交互的資訊。
呼叫方法
那麼,我們已經整理好了方法的創建,現在我們來說說使用方法。Java中如何呼叫方法? Java 中的每個方法都在一個類別中。為了理解 Java 中呼叫方法的工作原理,我們來看一個類別:public class StringConstructor {
public String constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
System.out.println(resultSentence);
return resultSentence;
}
}
由於我們的方法不是靜態的(這是一個單獨的討論主題,超出了今天文章的範圍),因此要調用它,您必須先創建一個對象,然後調用它的方法:
class Application{
public static void main(String[] args) {
StringConstructor stringConstructor = new StringConstructor();
stringConstructor.constructHelloSentence("Den");
}
}
在我們方法的參數中,我們傳遞了我們想要在螢幕上顯示的結果字串中看到的字串(名稱):
Hello world! My name is Den
還值得記住的是,方法可以根據需要多次重複使用 - 沒有任何限制。
這
您經常可以在程式碼中看到關鍵字this
,例如 setter 中:
public void setValue(Long value) {
this.value = value;
}
這意味著什麼? this
在Java中,this是對該類別的當前物件的引用。例如,如果我們建立一個物件:
StringConstructor stringConstructor = new StringConstructor();
那麼this
該物件內部stringConstructor
將有一個指向同一物件的連結。 this
既用於引用物件變數(如上面的 setter 中)又用於呼叫某些方法。我們可以稍微重寫一下我們的類別:
public class StringConstructor {
public String constructHelloSentence(String name) {
String resultSentence = this.getSentence() + name;
System.out.println(resultSentence);
return resultSentence;
}
private String getSentence() {
return "Hello world! My name is ";
}
}
透過this
我們呼叫這個物件的方法來取得所需的字串。但通常,這幾乎不用於方法,因為即使沒有它,也存在對給定物件的方法的引用;它主要用於物件變數。
方法重載
假設我們需要一個執行基本相同邏輯的方法,但在Hello world
! 相反,world
我們想插入我們自己的單字(字串)。但我們已經有方法了constructHelloSentence
。那麼,我們是否需要為本質上執行相同功能的方法取一個新名稱?不管怎樣:此時方法重載就派上用場了。 方法重載是在類別中聲明相同方法名稱時多次使用該方法。從語言語法的角度來看,在某個局部空間中不可能有兩個相同的名稱。但也可以宣告具有相同名稱但不同參數的方法。換句話說,當存在兩個或多個名稱相同但輸入資料不同的方法時,類別包含重載:
public class Constructor {
public String constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
System.out.println(resultSentence);
return resultSentence;
}
protected String constructHelloSentence(String firstName, String secondName) {
String resultSentence = "Hello " + firstName + "! My name is " + secondName;
System.out.println(resultSentence);
return resultSentence;
}
}
在這裡我們看到方法不必包含相同的存取修飾符(以及回傳類型)。如果呼叫重載方法,則編譯器會根據呼叫期間指定的參數從多個宣告的方法中自動決定所需的方法。
GO TO FULL VERSION