static方法不能直接访问类内的非static变量和不能调用this,super语句分析
大家都知道在static方法中,不能訪問類內非static成員變量和方法。可是原因是什么呢?
這首先要從static方法的特性說起。static方法,即類的靜態成員經常被稱為“成員變量”(class members),對于靜態成員變量,我們叫類屬性(class attributes),對于靜態成員方法,我們叫類方法(class members)。其中靜態成員變量:無論是否產生了對象或無論產生了多少對象的情況下,某些特定的數據在內存空間里只有一份。我們可以直接使用類名來訪問這個static變量,還可以在類的非靜態的成員方法中像訪問其他非靜態成員變量一樣去訪問這個靜態成員變量。對于靜態方法,該方法不必和對象綁在一起。訪問方式有三種,類內:非靜態成員方法可以直接訪問靜態成員方法,類外:類名.成員? 對象.成員
從以上我們就可以知道,靜態成員的最大特點是不用和對象綁定在一起。這個方便的特性,也成了它的一個包袱:當在靜態成員的類外時,如果是直接用類名.靜態成員的方式訪問,靜態成員直接訪問了一個非靜態的成員(該被訪問成員一般是類內的,如果是類外的,可能就先創建對象了,因為不能直接訪問,這里的直接訪問與訪問權限沒有概念上的關系,訪問權限是設定了訪問的范圍,直接訪問則是一種訪問方式)。這個時候就出現一個問題,非靜態的成員是怎么訪問的?如果可以直接訪問,難道它也是可以脫離對象的嗎?(靜態成員的訪問是脫離了對象的,而靜態成員又直接訪問了非靜態成員)答案顯然是否定的。所以在靜態方法中不可以直接訪問類內的非靜態成員,如果要訪問非靜態成員,則要先創建對象。
也許會有這樣的疑問:既然是出在了非靜態成員身上,那么可不可以用對象.static方法直接訪問類內的成員?這個樣子的實質還是直接訪問了非靜態成員,并不是說用了對象.static方法訪問就可以改變靜態方法訪問類內成員的方式.
簡而言之:
轉載于:https://www.cnblogs.com/hdk1993/p/4399833.html
總結
以上是生活随笔為你收集整理的static方法不能直接访问类内的非static变量和不能调用this,super语句分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android的十六进制颜色值
- 下一篇: 基于xilinx vivado的XADC