局部變量
“你好,我親愛的學生!是時候認真對待變量了。但是這次我們不會討論它們的內部結構。相反,我們將關注變量如何與它們所在的代碼交互。
“在方法內部聲明的所有變量都稱為局部變量。局部變量僅存在於聲明它的代碼塊中。或者更準確地說,它從聲明的那一刻起一直存在到塊的末尾聲明它的代碼。”
“顯然,我需要一個例子。”
“沒問題。給你:
代碼 | 變量可用性 |
---|---|
|
|
“讓我們再看一遍訪問局部變量的規則。這是一段代碼。它的開始和結束標記是什麼?”
“大括號?”
“正確。這可能是一個方法體,一個循環體,或者只是一個條件語句的代碼塊。在代碼塊中聲明的變量一直存在到該代碼塊的末尾。告訴我,將在哪裡如果在循環體中聲明變量,則該變量存在?”
“它將只存在於循環體中。”
“沒錯,而且每次循環都會創建和銷毀它。”
“這意味著你不能在一個方法中聲明兩個同名的局部變量——程序將無法編譯。但如果聲明變量的代碼塊不重疊,你可以這樣做。 ”
“你是我的最愛是有原因的,阿米戈。再舉一個例子來鞏固你的大腦。
代碼 | 可變可見性 |
---|---|
|
|
“我們能夠聲明第二個局部變量,b
僅因為第一個變量在聲明b
第二個變量的代碼塊中不可見。b
參數
“正如我們之前所說,每個方法都可以有我們稱之為參數的變量。它們的可見性和生命週期呢?”
“嗯……我難住了……”
“這裡的一切都很簡單。參數是在執行進入方法時創建的(即當方法的代碼開始執行時)。當方法結束時它們被消除。”
“也就是說,它們在整個法體中都是可見的,而且只存在於那裡?”
“是的。例子:
代碼 | 可變可見性 |
---|---|
|
|
“正如我們之前所說,args
它只是一個類型為字符串數組的變量。和所有參數一樣,它在方法體內的任何地方都可用。也就是說,我們通常在示例中忽略它。
類中的變量
“請記住第 1 級的課程,我們說一個類可以有方法和變量。方法有時稱為實例方法,而變量 — 實例變量或字段。
“類的變量(或字段)是什麼?
它們是不是在方法中而是在類中聲明的變量。”
“他們在那里幹什麼?”
“對於初學者來說,可以從一個類的任何(非靜態)方法訪問它們。粗略地說,實例變量是一個類的所有方法共享的變量。
例子:
代碼 | 可變可見性 |
---|---|
|
|
“在這個例子中,我們有兩個方法——add()
和remove()
。add()
方法增加sum
和count
實例變量,remove()
方法減少sum
和count
變量。這兩種方法都適用於共享實例變量。”
“我都明白了!局部變量在方法執行時存在。只要對象存在,類的實例變量就存在於類的對像中。”
“幹得好,阿米戈。我們已經奠定了一些基礎,你將在下一個級別了解有關某個類對象的詳細信息。
靜態變量
“和方法一樣,類中的變量可以是靜態的,也可以是非靜態的。靜態方法只能訪問靜態變量。
“我對靜態變量還沒有很清楚的認識。”
“哦,我知道,但別擔心。現在,先適應它們。熟悉它們。在第 11 關中,我們將分析靜態變量和方法的結構,您將了解這些的原因限制。
“要創建一個靜態變量(類變量),必須static
在它的聲明中寫上關鍵字。
“靜態變量不綁定到聲明它們的類的對像或實例。相反,它們屬於類本身。這就是為什麼即使沒有創建類的單個對象它們也存在的原因。你可以參考他們來自其他類,使用如下結構:
ClassName.variableName
例子:
代碼 | 可變可見性 |
---|---|
|
|
“在上面的示例中,我們創建了一個單獨的Storage
類,將count
和sum
變量移入其中,並將它們聲明為static。公共靜態變量可以從程序中的任何方法訪問(而不僅僅是從方法中訪問)。”
“我不太明白,不過這對我來說似乎很方便。”
“確實如此。有時這是必要的。如果沒有靜態變量和方法,我們就會陷入困境。”
“希望,我能慢慢弄明白。”
“是的,你當然會。”
GO TO FULL VERSION