您好,登錄后才能下訂單哦!
java中靜態方法和非靜態方法有區別嗎?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
1、靜態方法(static method)
與靜態成員變量一樣,屬于類本身,在類裝載的時候被裝載到內存中,不自動進行銷毀,會一直存在內存中,直到JVM關閉;
2、非靜態方法(non-static method)
又稱實例化方法,屬于實例對象,實例化之后才會分配內存,必須通過類的實例來引用,當實例對象被JVM回收之后,也跟著消失
靜態方法和實例方法的區別
1.生命周期
靜態方法的生命周期從進程創建時就開始,一直到進程結束,所以說靜態方法是全局的,貫穿整個進程
實例方法的生命周期,從實例化對象開始,一直到實例化對象被注銷回收之后結束
所以實例方法的生命周期是短于靜態方法的生命周期,這也是實例方法中不能調用靜態方法的原因
2.調用方式
在外部調用靜態方法時,可以使用 “類名.方法名”的方式,也可以使用“對象.方法名”的方式,也就是說調用靜態方法時無需創建對象
實例方法只能使用“對象.方法名的方式”
//-----------hasStaticMethod.java----------------- public class hasStaticMethod{ //定義一個靜態方法 public static void callMe(){ System.out.println("This is a static method."); } }
下面這個程序使用兩種形式來調用靜態方法。
//-----------invokeStaticMethod.java----------------- public class invokeStaticMethod{ public static void main(String args[]){ hasStaticMethod.callMe(); //不創建對象,直接調用靜態方法 hasStaticMethod oa = new hasStaticMethod(); //創建一個對象 oa.callMe(); //利用對象來調用靜態方法 } }
3.訪問限制
靜態方法在訪問本類的成員時,只允許訪問靜態成員(即靜態變量和靜態方法),而不允許訪問實例成員變量和實例方法;而實例方法則無此限制
實例成員變量是屬于某個對象的,在靜態方法執行時,并不一定存在該對象;同理,如果允許靜態方法訪問實例成員方法,就間接的可以訪問實例成員變量,所以也不能訪問實例成員方法;基于同樣的道理,靜態方法中也不能使用關鍵字this
//-----------accessMember.java----------------- class accessMember{ private static int sa; //定義一個靜態成員變量 private int ia; //定義一個實例成員變量 //下面定義一個靜態方法 static void statMethod(){ int i = 0; //正確,可以有自己的局部變量sa = 10; //正確,靜態方法可以使用靜態變量 otherStat(); //正確,可以調用靜態方法 ia = 20; //錯誤,不能使用實例變量 insMethod(); //錯誤,不能調用實例方法 } static void otherStat(){} //下面定義一個實例方法 void insMethod(){ int i = 0; //正確,可以有自己的局部變量 sa = 15; //正確,可以使用靜態變量 ia = 30; //正確,可以使用實例變量 statMethod(); //正確,可以調用靜態方法 } }
4.執行順序
當一個class文件被ClassLoader load進入JVM之后,方法指令保存在Stack中,此時Heap區并沒有數據。然后程序技術器開始執行指令,如果是靜態方法,直接依次執行指令代碼,當然此時指令代碼是不能訪問Heapshuju數據區的;如果是實例方法(實例方法有一個隱含的傳入參數,該參數是JVM給它的,這個參數就是實例對象在Stack中的內存地址,因此實例方法才可以找到在Heap中屬于自己的數據),則在調用前必須實例化該對象,在Heap中分配數據,并將Stack中的內存指針通過JVM的隱含參數傳給實例方法。若不實例化直接調用,由于隱含參數沒有值,會報錯。
關于java中靜態方法和非靜態方法有區別嗎問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。