之前學(xué)習(xí)java的時候遣疯,筆記都寫在小本子上诀艰,最近整理下妻熊,慢慢放在博客中
Static Method 與Non-Static Method的區(qū)別:?
1.生命周期:
靜態(tài)方法與靜態(tài)成員變量一樣浪慌,屬于類本身笼恰,在類裝載的時候被裝載到內(nèi)存中踊沸,不自動進行銷毀,會一直存在與內(nèi)存中社证,直到JVM關(guān)閉逼龟。
非靜態(tài)方法,又叫實例化方法追葡,屬于實例對象腺律,實例化后才會被分配內(nèi)存,必須通過類的實例來引用辽俗。不會常駐內(nèi)存疾渣,當(dāng)實例對象被JVM回收之后,也跟著消失崖飘。
2.在內(nèi)存中存儲的位置
靜態(tài)方法和靜態(tài)變量創(chuàng)建后始終使用同一塊內(nèi)存榴捡,是連續(xù)的。
非靜態(tài)方法會存在于內(nèi)存的多個地方朱浴,是離散的吊圾。
3.效率
靜態(tài)方法的使用效率比非靜態(tài)方法的效率高
4.線程安全
靜態(tài)方法是共享代碼段,靜態(tài)變量是共享數(shù)據(jù)段翰蠢。既然是“共享”就有并發(fā)的就問題项乒。
非靜態(tài)方法是針對確定的一個對象的,所以不會存在線程安全的問題梁沧。
5.使用范圍
靜態(tài)方法:1.有靜態(tài)屬性的類檀何,一般會定義靜態(tài)方法。2.沒有屬性的類,一般會定義靜態(tài)方法频鉴。3.如果一個方法與他所在類的實例對象無關(guān)栓辜,那么么它就應(yīng)該是靜態(tài)的。靜態(tài)方法可以被繼承但是不能被覆蓋垛孔。
---總結(jié):
如果靜態(tài)方法在系統(tǒng)中定義太多藕甩,會占用大量的資源,最后造成內(nèi)存溢出周荐,所以靜態(tài)方法不能濫用狭莱。
如果從線程安全、性能概作、兼容性上來看腋妙,選用實例化方法為宜。