靜態
在類前面加static就是靜態類,在方法或者字段和屬性前面加static就代表是靜態成員
反之不加就是非靜態類或者非靜態成員(實例成員)。
靜態和非靜態的區別
1)、在非靜態類中,既可以有實例成員(非靜態成員),也可以有靜態成員
2)、在調用實例成員的時候,需要使用對象名.實例成員;
在調用靜態成員的時候,需要使用類名.靜態成員名;
總結:
靜態成員必須使用類名去調用,而實例成員使用對象名調用。
靜態函數中,只能訪問靜態成員,不允許訪問實例成員。
實例函數中,既可以使用靜態成員,也可以使用實例成員。
靜態類中只允許有靜態成員,不允許出現實例成員。
使用:
1)、如果你想要你的類當做一個"工具類"去使用,這個時候可以考慮將類寫成靜態的。
2)、靜態類在整個項目中資源共享。
只有在程序全部結束之后,靜態類才會釋放資源。
特點
1:時間的問題 : 靜態和普通類型從時間上說,靜態類型是先存在的
靜態方法能夠直接訪問普通方法嘛? 不能
普通方法能夠直接訪問靜態方法嘛? 可以
靜態方法可以間接調用普通方法嘛? 可以的,重新實例化一個對象,其實就是強制改變順序,讓靜態方法存在的時候,對象也已經存在,既然對象都存在,對象的方法自然也有存在
2:空間的問題 : 單獨存在不屬於任何一個對象,靜態字段改變,這個對象所有靜態字段都會改變因為只有一份。普通的字段,是一個對象一個字段, 對象發生改變之后不會影響其他字段。
堆 棧 靜態存儲區域
釋放資源。GC Garbage Collection垃圾回收器
關於占用內存
靜態的東西在類加載的時候,會在內存中開辟空間,實例成員不會,所以在靜態類或者方法里無法訪問到實例成員,所以靜態方法里面只能訪問靜態字段或者屬性。
靜態類已分配固定的內存空間,非靜態類在每new一個新對象要在內存中重新開辟空間,所以靜態類不能實例化
靜態類會在程序初始化運行時創建完所有字段和方法,而非靜態類則會在實例化時創建所有字段和方法
類是不占內存的,只有對象是占內存的,靜態類也是占內存的
內存有
堆,棧,靜態存儲區域(靜態資源全部都放在靜態存儲區域,在項目中任意地方都可以訪問)