淺談Java中static和非static的區(qū)別
關(guān)于static和非static變量的區(qū)別
1. static 修飾的變量稱為類變量或全局變量或成員變量,在類被加載的時(shí)候成員變量即被初始化,與類關(guān)聯(lián),只要類存在,static變量就存在。非static修飾的成員變量是在對象new出來的時(shí)候劃分存儲空間,是與具體的對象綁定的,該成員變量僅為當(dāng)前對象所擁有的。
2. static修飾的變量在加載的時(shí)候先于main方法加載在內(nèi)存中的數(shù)據(jù)共享區(qū)-------方法區(qū),而非static的變量在加載的時(shí)候,是要?jiǎng)?chuàng)建變量才加載在堆內(nèi)存中的。
3. 一個(gè)static變量單獨(dú)劃分一塊存儲空間,不與具體的對象綁定在一起,該存儲空間被類的各個(gè)對象所共享。static變量值在方法區(qū)加載一次,而非static在創(chuàng)建對象時(shí)會加載很多次。每次創(chuàng)建都會拷貝一份。
4. 對象在引用成員變量是直接通過類名.變量名調(diào)用,對象在引用實(shí)例變量時(shí)只能通過對象名.變量名調(diào)用。
5. 在類中調(diào)用成員變量時(shí)直接調(diào)用或者以類名.變量名方式調(diào)用,實(shí)例變量則用this或者直接調(diào)用。
關(guān)于static方法和非static方法的區(qū)別
1. static修飾的方法也和static一樣。先于main方法被加載到方法區(qū),以便共享使用。
2. 靜態(tài)的static方法中不能使用this或者super關(guān)鍵字,因?yàn)閟tatic方法是先于對象創(chuàng)建之前就已經(jīng)加載的方法,是屬于類的方法,而this和super指向的是本類的對象或者父類的對象,非靜態(tài)的方法是屬于對象的,方法里可以用this和super。
3. static方法可以用對象.方法名來調(diào)用,也可以用類名.方法名來調(diào)用。而非靜態(tài)的方法只能創(chuàng)建對象后時(shí)調(diào)用。
4. static方法是加載一次,被所有的對象所共享。而非靜態(tài)方法是有多少個(gè)對象就拷貝多少次,每個(gè)對象只能調(diào)用自己的拷貝的方法。
5. 對象調(diào)用非靜態(tài)的方法時(shí),不考慮線程安全性的問題,而調(diào)用靜態(tài)方法時(shí),要考慮安全性的問題。因?yàn)殪o態(tài)方法只有一份。而對象的方法是自己有自己的。
6. 同一個(gè)類中,靜態(tài)方法中只能訪問類中的靜態(tài)成員。而非靜態(tài)方法可以訪問非靜態(tài)的方法(使用類名調(diào)用,或者創(chuàng)創(chuàng)建本類的對象調(diào)用)。
總結(jié)
以上就是本文關(guān)于Java中static和非static的區(qū)別的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以參閱:Java單例模式實(shí)現(xiàn)靜態(tài)內(nèi)部類方法示例、Java多線程ForkJoinPool實(shí)例詳解、淺談Java注解和動態(tài)代理等,有什么問題可以隨時(shí)留言,小編會及時(shí)回復(fù)大家的。
相關(guān)文章
java?面向?qū)ο蟠a塊及不同位置對屬性賦值的執(zhí)行順序
這篇文章主要介紹了java面向?qū)ο蟠a塊及不同位置對屬性賦值的執(zhí)行順序,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
解決Error:(5, 28) java: 程序包org.apache.ibatis.io
這篇文章主要介紹了解決Error:(5, 28) java: 程序包org.apache.ibatis.io不存在問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
Java數(shù)據(jù)結(jié)構(gòu)之哈夫曼樹概述及實(shí)現(xiàn)
文中詳細(xì)講了關(guān)于Java哈夫曼樹的概述以及用Java實(shí)現(xiàn)的方法,對各位正在學(xué)習(xí)java數(shù)據(jù)結(jié)構(gòu)的小伙伴們有很大的幫助喲,需要的朋友可以參考下2021-05-05
Java多線程通信wait()和notify()代碼實(shí)例
這篇文章主要介紹了Java多線程通信wait()和notify()代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
mybatis多對多關(guān)聯(lián)實(shí)戰(zhàn)教程(推薦)
下面小編就為大家?guī)硪黄猰ybatis多對多關(guān)聯(lián)實(shí)戰(zhàn)教程(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10

