亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么普通成員方法可以直接訪問非靜態變量,而靜態方法不能直接訪問非靜態變量?

為什么普通成員方法可以直接訪問非靜態變量,而靜態方法不能直接訪問非靜態變量?

放__空 2016-09-22 01:25:07
那岂不是没有非静态变量和静态变量之分了,非静态变量也能被同类中的所有方法访问?
查看完整描述

7 回答

?
若不極致便平庸

TA貢獻1條經驗 獲得超1個贊

靜態變量在類被調用的時候,它就已經存在了.地址名就是靜態變量名(換句話說就是類已經幫你把它實例化好了,不用你再動手用對象去實例化了),所以普通成員方法(非靜態方法)和靜態方法都可直接訪問調用靜態變量.因為它已經創建好擺在那里了.然而非靜態變量與靜態變量不同的是它是虛無的,它需要對象去創建出來.所以沒辦法直接訪問.那問題來了,說沒辦法直接訪問,但為什么在普通成員方法中可以直接訪問非靜態變量呢?哈哈,你想一想,你如果想調用普通成員方法之前要干嘛?當然要new一個對象出來啊,這個new出來的對象就幫你在實例化方法的同時,把方法中的非靜態變量也實例化了。(最后補充一句,被調用的類只是張圖紙而已,不要把類當成程序)

查看完整回答
1 反對 回復 2016-10-07
  • 若不極致便平庸
    若不極致便平庸
    靜態變量和非靜態變量(成員變量)本質上的不同有兩點:第一點,靜態變量從類被調用之初它就在內存中找了一個位置住下了.而非靜態變量還在類這張圖紙上,虛無著,沒在內存中找位置.只有當一個對象去調用它,它才會在內存中找一個位置住下. 第二點,靜態變量在內存中的位置住下了,所有的對象調用他都是在同一個內存地址.所以當有一個對象改變靜態變量值時,所有對象調用的靜態變量的值都跟著變.而成員變量不同,因為它被一個對象調用就是一個新的不同的位置,A對象一個位置,B對象又是另一個位置,所以A只能改變A成員變量的值,B只能改變B成員變量的值,他們之間互不影響,因為位置不同.
?
大咪

TA貢獻785條經驗 獲得超332個贊

正如1L所說,你得普通方法對象對應非靜態變量的時候可以說是一對一,就是都是在這一個對象里,而靜態方法去訪問非靜態變量就是一對多,因為靜態方法是屬于類的,那你這個類里可以有多個對象呀,那假如我訪問的是我類中并沒有實例化的對象(內存不存在的),那就會保存了呀……

查看完整回答
1 反對 回復 2016-09-22
  • 放__空
    放__空
    不懂,我的問題來源是看了java第二季的1-9 Java 中的 static 使用之靜態方法的第1,2個知識點,
  • 大咪
    大咪
    要是剛學習的話是不太好理解,暫時就先當做概念記吧,要是記不住的話就可以先記住實例的定義方法,就是你說的1-9的那個例子,調用錯了無非就是會報錯唄。。。等以后學的多了再回來思考思考自然而然就懂了
  • 放__空
    放__空
    好吧,謝謝
點擊展開后面1
?
weixin_慕桂英2009959

TA貢獻1條經驗 獲得超0個贊

1.靜態方法和靜態變量在類初始化時已經分配內存,已經存在,因此隨時可以調用。2.非靜態方法和非靜態變量在類初始化時不存在,只有類實例化成對象時才分配內存而存在。3.普通成員方法可以調用靜態和非靜態變量,調用靜態原因看第一條;普通成員方法在調用非靜態變量時,必須先滿足實例化才能調用普通成員方法,一旦實例化,那非靜態變量也就分配到內存了(原因看第二條)。所以系統不擔心你在普通成員方法中調用非靜態變量,因為你要用普通成員方法的前提就是實例化,實例化就滿足了第二條規則。

查看完整回答
反對 回復 2019-04-12
?
別惹IT男

TA貢獻2條經驗 獲得超1個贊



我同意一樓的答案

查看完整回答
反對 回復 2016-10-02
?
qq_晝綻_0

TA貢獻82條經驗 獲得超17個贊

因為加載順序,靜態方法先加載,當然拿不到

查看完整回答
反對 回復 2016-09-22
?
7842659

TA貢獻1條經驗 獲得超1個贊

我理解的是, 因為靜態的 比 非靜態的 先加載到內存,所以靜態加載完了,非靜態太的在加載, 靜態的掉不到非靜態的東西,因為非靜態的還沒有加載到內存

查看完整回答
1 反對 回復 2016-09-22
  • 若不極致便平庸
    若不極致便平庸
    額,你這個理解不對,不是靜態比非靜態先加載到內存,而是非靜態的東西在沒有對象調用他們之前根本不加載到內存。
?
ziom

TA貢獻948條經驗 獲得超1109個贊

因為非靜態成員屬于對象,靜態成員屬于類。

查看完整回答
1 反對 回復 2016-09-22
  • 7 回答
  • 2 關注
  • 4127 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號