7 回答

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

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

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