之前學習java的時候,筆記都寫在小本子上,最近整理下,慢慢放在博客中
Static Method 與Non-Static Method的區別:?
1.生命周期:
靜態方法與靜態成員變量一樣,屬于類本身,在類裝載的時候被裝載到內存中,不自動進行銷毀,會一直存在與內存中,直到JVM關閉。
非靜態方法,又叫實例化方法,屬于實例對象,實例化后才會被分配內存,必須通過類的實例來引用。不會常駐內存,當實例對象被JVM回收之后,也跟著消失。
2.在內存中存儲的位置
靜態方法和靜態變量創建后始終使用同一塊內存,是連續的。
非靜態方法會存在于內存的多個地方,是離散的。
3.效率
靜態方法的使用效率比非靜態方法的效率高
4.線程安全
靜態方法是共享代碼段,靜態變量是共享數據段。既然是“共享”就有并發的就問題。
非靜態方法是針對確定的一個對象的,所以不會存在線程安全的問題。
5.使用范圍
靜態方法:1.有靜態屬性的類,一般會定義靜態方法。2.沒有屬性的類,一般會定義靜態方法。3.如果一個方法與他所在類的實例對象無關,那么么它就應該是靜態的。靜態方法可以被繼承但是不能被覆蓋。
---總結:
如果靜態方法在系統中定義太多,會占用大量的資源,最后造成內存溢出,所以靜態方法不能濫用。
如果從線程安全、性能、兼容性上來看,選用實例化方法為宜。