簡體   English   中英

靜態方法和變量

[英]Static methods and variables

我知道在java中靜態方法只能使用靜態變量和靜態方法,但非靜態方法可以使用非靜態變量和方法。 有沒有解釋為什么靜態方法只能訪問靜態變量/方法? 並且無法訪問非靜態方法和變量?

要訪問非靜態方法/字段,您需要該類的實例。

實例化一個類時,它將被加載到堆或堆棧中。 在這種情況下,您的應用程序具有對內存實例所在部分的引用。 但是,靜態方法只是加載到內存中的函數。 這就是為什么如果您的靜態方法想要訪問類變量或方法,它不能只調用它,因為堆中可能存在多個對該類的引用,而且只存在一個靜態方法。

如果要從靜態方法調用任何非靜態方法,則應該將該實例(或創建一個)用於該類,以便您可以定義實際意義上的類引用。

想一想:

a)假設你是一個靜態方法。

b)您獨立於任何對象實例存在。 即使沒有類實例,你也存在。

c)您想要訪問非靜態變量。 存在於ONE和ONLY對象實例中的變量 - 一個特定於該特定對象實例的變量。

d)你要使用哪個對象實例的非靜態變量?

靜態方法可以訪問類的非靜態成員......只要他們通過類引用來完成它。

否則 - 沒有類引用 - 沒有訪問權限。

說得通? ;)

在靜態上下文中,“this”關鍵字無法訪問。 我們不能在靜態上下文中使用此關鍵字。 實例變量在構造函數調用時初始化。 但是在加載類時會初始化靜態變量。 在加載類的過程中,如果在靜態上下文中使用實例變量,實例變量仍未在此期間被識別,則會導致編譯時錯誤,因為當時未識別它們

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM