1.傳遞參數
現在樂趣開始了。您可能已經從類似的方法中了解到System.out.println()
我們可以將參數傳遞給方法。一旦我們進入方法內部,我們就將它們稱為參數。事實上,參數極大地增強了我們從創建和使用方法中獲得的好處。
我們如何聲明帶參數的方法?其實很簡單:
public static void name(parameters)
{
method body
}
其中name
是方法的唯一名稱,method body
代表組成該方法的命令。Andparameters
是方法參數的佔位符,以逗號分隔。讓我們更詳細地描述這個模板:
public static void name(Type1 name1, Type2 name2, Type3 name3)
{ method body
}
例子:
代碼 | 解釋 |
---|---|
|
該print 方法使用參數聲明:String str |
|
該print 方法使用兩個參數聲明:String str int count |
|
該write 方法使用兩個參數聲明:int x int y |
如果我們不想讓方法有參數,那麼我們就把括號留空。
參數是方法中的特殊變量。在它們的幫助下,您可以在調用方法時將各種值傳遞給該方法。
例如,讓我們編寫一個方法,將一串文本顯示給定的次數。
您已經知道如何編寫代碼在屏幕上多次顯示一個字符串。但是你應該打印哪個字符串呢?多少次?這就是我們需要參數的原因。
執行此操作的代碼如下所示:
代碼 | 解釋 |
---|---|
|
我們 printLines 使用以下參數聲明該方法:String text ,int count 該方法顯示 String text count 次我們 printLines 使用各種參數調用該方法 |
每次調用方法時,都會為其參數分配傳遞的值,然後我們才開始執行方法內部的命令。
2. 爭論
我想提請您多注意調用帶參數的方法。
傳遞給方法的值在傳遞給方法時通常稱為參數。
讓我們看另一個例子:
代碼 | 解釋 |
---|---|
|
我們 printLines 使用以下參數聲明該方法:String text ,int count 該方法顯示 String text count 次我們 printLines 使用以下參數調用該方法:text = "Hi"; count = 10; text = "Bye"; count = 20; |
當printLines
第一次調用該方法時,它的參數被分配了以下值:String text = "Hi", int count = 10
。
printLines
第二次調用該方法時,其參數被賦予了不同的值: String text = "Bye", int count = 20
.
參數不多於也不少於調用方法時被賦予特定值的變量。值"Hi"
、"Bye"
、10
和20
本身稱為參數。”
3.調用方法時變量名衝突
變量可以用作方法參數。這是簡單易懂的,但它可能會產生一些困難。讓我們回到同一個例子,但這次我們將把參數移到單獨的變量中:
代碼 | 解釋 |
---|---|
|
我們 printLines 使用以下參數聲明該方法:String text ,int count 該方法顯示 String text count 次我們 printLines 使用以下參數調用該方法:text = str; count = n; |
到目前為止,還不錯:我們有一個str
變量。text
它的值在調用方法時分配給參數。我們有一個n
變量。它的值在調用方法時分配給count
參數。”至此,一切都清楚了。
現在讓我們重命名方法中的變量main
:
代碼 | 解釋 |
---|---|
|
我們 printLines 使用以下參數聲明該方法:String text ,int count 該方法顯示 String text count 次我們 printLines 使用以下參數調用該方法:text = text; count = count; |
注意兩點
第一:我們在不同的方法中有同名的變量。這些是不同的變量(我們故意用不同的顏色來描繪它們)。一切都與前面的示例相同,其中方法中的變量main
被命名為str
和n
。
第二:調用該方法時不會發生任何神奇的事情。參數只是簡單地分配參數值。不管它們是數字、字符串、變量還是表達式。
在我們重命名 main 方法中的變量之後,什麼都沒有改變。它們以前是不同方法中的不同變量,所以它們仍然存在。text
在和變量之間沒有神奇的聯繫text
。
4.傳遞對方法的引用
我希望你已經理解了上一課的所有內容,因為現在我們將重新討論將參數傳遞給方法,只是我們會深入探討。
正如您已經知道的,一些 Java 變量存儲的不是值本身,而是一個引用,即值所在的內存塊的地址。這就是字符串變量和數組變量的工作方式。
當您將另一個數組變量分配給一個數組變量時,會發生什麼?這是正確的。這兩個變量開始引用內存中的相同空間:
如果這些變量之一是方法參數,會發生什麼?
代碼 | 解釋 |
---|---|
|
該 printArraySum 方法計算傳入數組中數字的總和並將其顯示在屏幕上 |
完全相同的事情發生了:data
參數將包含對與變量相同的內存區域的引用months
。調用該方法時,會發生一個簡單的賦值:。data = months
並且由於兩個變量都引用存儲整數的同一內存區域,因此該printArraySum
方法不僅可以從數組中讀取值,還可以更改它們!
例如,我們可以編寫自己的方法,用相同的值填充一個二維數組。這就是它的樣子:
代碼 | 解釋 |
---|---|
|
該 fill 方法遍歷傳遞的二維數組中的每個單元格並分配value 給它們。我們創建一個二維數組。 我們用數字填充整個數組 8 。 |
5.同名方法
現在讓我們再次回到方法名稱。
Java 標準要求同一類中的所有方法都具有唯一的名稱。換句話說,不可能在同一個類中聲明兩個同名方法。
當比較方法的相同性時,不僅要考慮名稱,還要考慮參數的類型!請注意,不考慮參數的名稱。例子:
代碼 | 解釋 |
---|---|
|
這三種方法是不同的方法。它們可以在同一個類中聲明。 |
|
這五種方法中的每一種都被認為是不同的。它們可以在同一個類中聲明。 |
|
這兩個方法被認為是相同的,這意味著它們不能在同一個類中聲明。 |
為什麼有些方法被認為是相同的,而另一些則不同?為什麼在確定方法的唯一性時不考慮參數名稱?
為什麼唯一性是必要的?關鍵是當編譯器編譯一個程序時,它必須確切地知道你打算在任何給定的地方調用哪個方法。
例如,如果你寫,編譯器很聰明,很容易斷定你打算用參數調用這裡的方法。System.out.println("Hi")
println()
String
但是,如果您編寫,編譯器將看到對帶有參數的方法的調用。System.out.println(1.0)
println()
double
調用方法時,編譯器確保參數的類型與參數的類型相匹配。它不注意參數的名稱。在 Java 中,參數名稱不幫助編譯器確定調用哪個方法。這就是為什麼在確定方法的唯一性時不考慮它們的原因。
方法的名稱及其參數的類型稱為方法簽名。例如,sum(int, int)
每個類都必須具有具有唯一簽名的方法,而不是具有唯一名稱的方法。
GO TO FULL VERSION