關于靜態方法不能調用非靜態方法的問題
基本前提:靜態方法不能調用非靜態成員(成員方法與成員變量)
代碼:一個main方法可以這么寫:
class?Demo{ ????public?static?void?main(String[]?args){ ????????Demo?d?=?new?Demo(); ????????} ????}
解釋:這里用的是Demo的內置無參構造函數,構造函數也是一個普通函數,也沒有被static修飾,所以從這里理解構造函數只是一個成員函數。
問題:那么,作為靜態函數的main,是如何調用作為成員函數的構造函數的?
2017-08-27
2017-09-05
這個問題我算是終于找到正確答案了,如下:
參考鏈接:http://rednaxelafx.iteye.com/blog/652719
準確來說,構造方法(Constructor)實際上與普通方法(Method)是兩個東西,大概翻譯過來的時候為了大家容易上手就說是構造方法了。其實這有點混淆了。
從JVM上看,靜態static方法與構造方法(constructor)在內聯優化的時候,效果是一樣的,不過這不能說構造方法就是static。
其實最后還是不太清楚,JVM原理還是不太清楚,不過基本可以理解。
2017-08-27
靜態屬性調用的時候不能創建實例,非靜態屬性必須通過創建的實例才能調用
2017-08-27
為排除main程序的特殊性,再貼一段非main函數Demo:如下:
2017-08-27
這是main函數,不一樣