遇到一個問題:

如圖所示,在改行中IDE給出warning:
The static method PRint() from the type demo should be accessed in a static way
有三種解決方案:
把text該為demo;把print()方法中的static去掉;把text去掉,直接調(diào)用print()方法;簡單來說:
這個是警告,不是錯誤,不影響使用print()方法是static靜態(tài)方法,直接使用”類.方法”調(diào)用,因為靜態(tài)方法在對象創(chuàng)建前就存在了,他的使用不依賴對象是否被創(chuàng)建.非靜態(tài)的方法用”對象.方法”的方式,因為他在對象創(chuàng)建前不存在,必須依賴對象的創(chuàng)建后,才能使用由于在本類調(diào)用,可以直接使用方法。以下是static方法和實例方法的區(qū)別:
● 生命周期(Lifecycle):
靜態(tài)方法(Static Method)與靜態(tài)成員變量一樣,屬于類本身,在類裝載的時候被裝載到內(nèi)存(Memory),不自動進行銷毀,會一直存在于內(nèi)存中,直到JVM關閉。
非靜態(tài)方法(Non-Static Method)又叫實例化方法,屬于實例對象,實例化后才會分配內(nèi)存,必須通過類的實例來引用。不會常駐內(nèi)存,當實例對象被JVM 回收之后,也跟著消失。
● 在內(nèi)存中存儲位置
靜態(tài)方法和靜態(tài)變量創(chuàng)建后始終使用同一塊內(nèi)存,是連續(xù)的。
非靜態(tài)方法會存在于內(nèi)存的多個地方,是離散的。
● 效率
靜態(tài)方法的使用效率比非靜態(tài)方法的效率高。
● 線程安全
靜態(tài)方法是共享代碼段,靜態(tài)變量是共享數(shù)據(jù)段。既然是“共享”就有并發(fā)(Concurrence)的問題。
非靜態(tài)方法是針對確定的一個對象的,所以不會存在線程安全的問題。
● 使用范圍
靜態(tài)方法: ⒈ 有靜態(tài)屬性的類,一般會定義靜態(tài)方法。 ⒉ 沒有屬性的類,一般會定義靜態(tài)方法。 ⒊ 如果一個方法與他所在類的實例對象無關,那么它就應該是靜態(tài)的。靜態(tài)方法可以被繼承但是不能被覆蓋。
● 總計
如果靜態(tài)方法在系統(tǒng)中定義太多,會占用大量的資源,最后造成內(nèi)存溢出,所以靜態(tài)方法不能濫用。如果從線程安全、性能、兼容性上來看,選用實例化方法為宜。
一般來說, 在程序里面,一些使用頻率高的方法就用static 方法、使用頻率低的則用實例方法。
注意:
靜態(tài)方法中可以直接調(diào)用同類中的靜態(tài)成員,但不能直接調(diào)用非靜態(tài)成員。如果希望在靜態(tài)方法中調(diào)用非靜態(tài)變量,可以通過創(chuàng)建類的對象,然后通過對象來訪問非靜態(tài)變量。在普通成員方法中,則可以直接訪問同類的非靜態(tài)變量和靜態(tài)變量。靜態(tài)方法中不能直接調(diào)用非靜態(tài)方法,需要通過對象來訪問非靜態(tài)方法。新聞熱點
疑難解答