java中靜態(tài)方法和非靜態(tài)方法有區(qū)別嗎?針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
站在用戶的角度思考問題,與客戶深入溝通,找到商都網(wǎng)站設(shè)計與商都網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗(yàn)好的作品,建站類型包括:成都做網(wǎng)站、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋商都地區(qū)。1、靜態(tài)方法(static method)
與靜態(tài)成員變量一樣,屬于類本身,在類裝載的時候被裝載到內(nèi)存中,不自動進(jìn)行銷毀,會一直存在內(nèi)存中,直到JVM關(guān)閉;
2、非靜態(tài)方法(non-static method)
又稱實(shí)例化方法,屬于實(shí)例對象,實(shí)例化之后才會分配內(nèi)存,必須通過類的實(shí)例來引用,當(dāng)實(shí)例對象被JVM回收之后,也跟著消失
靜態(tài)方法和實(shí)例方法的區(qū)別
1.生命周期
靜態(tài)方法的生命周期從進(jìn)程創(chuàng)建時就開始,一直到進(jìn)程結(jié)束,所以說靜態(tài)方法是全局的,貫穿整個進(jìn)程
實(shí)例方法的生命周期,從實(shí)例化對象開始,一直到實(shí)例化對象被注銷回收之后結(jié)束
所以實(shí)例方法的生命周期是短于靜態(tài)方法的生命周期,這也是實(shí)例方法中不能調(diào)用靜態(tài)方法的原因
2.調(diào)用方式
在外部調(diào)用靜態(tài)方法時,可以使用 “類名.方法名”的方式,也可以使用“對象.方法名”的方式,也就是說調(diào)用靜態(tài)方法時無需創(chuàng)建對象
實(shí)例方法只能使用“對象.方法名的方式”
//-----------hasStaticMethod.java----------------- public class hasStaticMethod{ //定義一個靜態(tài)方法 public static void callMe(){ System.out.println("This is a static method."); } }
下面這個程序使用兩種形式來調(diào)用靜態(tài)方法。
//-----------invokeStaticMethod.java----------------- public class invokeStaticMethod{ public static void main(String args[]){ hasStaticMethod.callMe(); //不創(chuàng)建對象,直接調(diào)用靜態(tài)方法 hasStaticMethod oa = new hasStaticMethod(); //創(chuàng)建一個對象 oa.callMe(); //利用對象來調(diào)用靜態(tài)方法 } }
3.訪問限制
靜態(tài)方法在訪問本類的成員時,只允許訪問靜態(tài)成員(即靜態(tài)變量和靜態(tài)方法),而不允許訪問實(shí)例成員變量和實(shí)例方法;而實(shí)例方法則無此限制
實(shí)例成員變量是屬于某個對象的,在靜態(tài)方法執(zhí)行時,并不一定存在該對象;同理,如果允許靜態(tài)方法訪問實(shí)例成員方法,就間接的可以訪問實(shí)例成員變量,所以也不能訪問實(shí)例成員方法;基于同樣的道理,靜態(tài)方法中也不能使用關(guān)鍵字this
//-----------accessMember.java----------------- class accessMember{ private static int sa; //定義一個靜態(tài)成員變量 private int ia; //定義一個實(shí)例成員變量 //下面定義一個靜態(tài)方法 static void statMethod(){ int i = 0; //正確,可以有自己的局部變量sa = 10; //正確,靜態(tài)方法可以使用靜態(tài)變量 otherStat(); //正確,可以調(diào)用靜態(tài)方法 ia = 20; //錯誤,不能使用實(shí)例變量 insMethod(); //錯誤,不能調(diào)用實(shí)例方法 } static void otherStat(){} //下面定義一個實(shí)例方法 void insMethod(){ int i = 0; //正確,可以有自己的局部變量 sa = 15; //正確,可以使用靜態(tài)變量 ia = 30; //正確,可以使用實(shí)例變量 statMethod(); //正確,可以調(diào)用靜態(tài)方法 } }
4.執(zhí)行順序
當(dāng)一個class文件被ClassLoader load進(jìn)入JVM之后,方法指令保存在Stack中,此時Heap區(qū)并沒有數(shù)據(jù)。然后程序技術(shù)器開始執(zhí)行指令,如果是靜態(tài)方法,直接依次執(zhí)行指令代碼,當(dāng)然此時指令代碼是不能訪問Heapshuju數(shù)據(jù)區(qū)的;如果是實(shí)例方法(實(shí)例方法有一個隱含的傳入?yún)?shù),該參數(shù)是JVM給它的,這個參數(shù)就是實(shí)例對象在Stack中的內(nèi)存地址,因此實(shí)例方法才可以找到在Heap中屬于自己的數(shù)據(jù)),則在調(diào)用前必須實(shí)例化該對象,在Heap中分配數(shù)據(jù),并將Stack中的內(nèi)存指針通過JVM的隱含參數(shù)傳給實(shí)例方法。若不實(shí)例化直接調(diào)用,由于隱含參數(shù)沒有值,會報錯。
關(guān)于java中靜態(tài)方法和非靜態(tài)方法有區(qū)別嗎問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計公司行業(yè)資訊頻道了解更多相關(guān)知識。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)站欄目:java中靜態(tài)方法和非靜態(tài)方法有區(qū)別嗎-創(chuàng)新互聯(lián)
網(wǎng)頁路徑:http://jinyejixie.com/article32/gphsc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站制作、域名注冊、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容