日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
在Java類中靈活使用Static關(guān)鍵字

用專業(yè)術(shù)語來說,只有利用了new關(guān)鍵字創(chuàng)建對象后,才會(huì)在系統(tǒng)中為其創(chuàng)建存儲空間。不過在有些特殊的情況下,程序員可能希望在沒有創(chuàng)建對象的時(shí)候就能夠?yàn)槟硞€(gè)特定的成員分配存儲空間或者可以調(diào)用某個(gè)方法等等。在Java中能否實(shí)現(xiàn)這個(gè)需求呢?

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:空間域名、網(wǎng)站空間、營銷軟件、網(wǎng)站建設(shè)、晉安網(wǎng)站維護(hù)、網(wǎng)站推廣。

一、不建立對象即想使用的兩種實(shí)際情況。

筆者提到的這個(gè)問題是否是無中生有呢?其實(shí)不然。在實(shí)際應(yīng)用程序開發(fā)中,就經(jīng)常會(huì)遇到這種情況。如現(xiàn)在需要三個(gè)對象,分別用來計(jì)算圓的面積、圓球的體積、圓柱的體積。在這三個(gè)對象的方法中,都需要用到一個(gè)叫做圓周率的常量,而且這個(gè)圓周率是固定不變的。所以,在程序開發(fā)中,對于這些公用的成員變量最好能夠統(tǒng)一管理。當(dāng)調(diào)整成員變量的精度時(shí),其運(yùn)算結(jié)果的精度也會(huì)隨之調(diào)整。從程序員的角度來看,這就是要求在沒有創(chuàng)建對象之前就要給成員變量分配存儲空間,以方便其他的類可以因用這個(gè)變量。而這個(gè)需求如果沒有Statci關(guān)鍵字的話就無法實(shí)現(xiàn)。

第二種情況就是程序員可能希望某個(gè)方法不予包含它的類的任何對象關(guān)聯(lián)在一起。這個(gè)讀起來可能有點(diǎn)拗口。簡單的說,就是即使沒有使用new關(guān)鍵字創(chuàng)建對象的情況下,程序員仍然能夠調(diào)用這個(gè)方法。也就是說,在創(chuàng)建類的時(shí)候就需要為這個(gè)方法分配存儲空間。就好像造汽車時(shí),在做汽車設(shè)計(jì)圖紙時(shí)就需要把發(fā)動(dòng)機(jī)準(zhǔn)備好。那么即使汽車還沒造好,這個(gè)發(fā)動(dòng)起也可以先拿來看看。此時(shí)也需要采用Static關(guān)鍵字來完成這個(gè)需求。

二、Static關(guān)鍵字的用途。

簡單的說,Static關(guān)鍵字的用途就是在創(chuàng)建類的時(shí)候就給特定的成員或者方法分配存儲空間。當(dāng)程序員在成員變量或者方法前面加上Static關(guān)鍵字時(shí),就表示這些成員與方法不會(huì)與包含它的那個(gè)類的任何對象實(shí)例關(guān)聯(lián)在一起。換一句話就是說,即使沒有創(chuàng)建這個(gè)類的對象,程序員仍然可以調(diào)用這個(gè)類中的成員或者方法。因?yàn)樗麄儗?shí)際上已經(jīng)存在,系統(tǒng)已經(jīng)為他們分配了存儲空間。不過需要注意的是,Static關(guān)鍵字定義的成員與方法,畢竟與傳統(tǒng)的對象創(chuàng)建方法有所差異。所以無論是在定義時(shí)還是在具體的引用過程中,都有所差異。程序開發(fā)人員必須了解這種差異,并在實(shí)際的工作中要引起重視。特別是如果有其他語言開發(fā)經(jīng)驗(yàn)的程序員,不要將Java語言的這個(gè)特性與其他語言搞混,否則的話很容易出現(xiàn)錯(cuò)誤。

三、利用Static關(guān)鍵字來定義成員變量。

如上面那個(gè)案例中,需要定義一個(gè)類,然后在這個(gè)類中需要用到一個(gè)叫做圓周率的成員。如果我們將這個(gè)成員命名為pi,則這個(gè)類可以按照下面的方法定義成員變量。

 
 
 
  1. Class circle{   
  2. Static float pi=3.14  

這個(gè)類的定義跟其他類最大的不同,就是在成員變量前面加了一個(gè)static關(guān)鍵字。此時(shí)就將這個(gè)成員變量設(shè)置為了staitc狀態(tài)。其實(shí)在創(chuàng)建這個(gè)類的時(shí)候,系統(tǒng)就為其分配了一份存儲空間。而不是在創(chuàng)建對象的時(shí)候再創(chuàng)建的。也就是說,現(xiàn)在就將這個(gè)成員變量跟包含它的類獨(dú)立出來。在這種情況下,如果利用new關(guān)鍵字來創(chuàng)建對象,那么這個(gè)成員變量都是指向同一個(gè)。即程序員如果利用這個(gè)類創(chuàng)建三個(gè)對象時(shí),其成員變量pi都指向同一個(gè)存儲空間。為此不同對象內(nèi)的成員變量pi的值都是相同的,因?yàn)槠鋵?shí)際上都指的是同一東西。所以說,要統(tǒng)一多個(gè)對象中成員變量的值是非常簡單的。只需要在定義類的時(shí)候,在這個(gè)成員變量的前面加上關(guān)鍵字static即可。

那么該如何引用這個(gè)成員變量呢?據(jù)筆者所知,現(xiàn)在主要有兩種引用的方法。不過筆者只用其中的一種。第一種方式就是跟傳統(tǒng)的引用方式相同。也就是說,第一步是創(chuàng)建類(根據(jù)需要可以在某個(gè)成員變量前面利用static關(guān)鍵字加以修飾),第二步是創(chuàng)建對象,第三步就是通過對象來引用成員變量。引用的格式就是對象名.成員變量。這種方法就是比較傳統(tǒng)的方法,通過對象去定位成員變量。很明顯,如果采用這種方法的話,在代碼中就不能夠體現(xiàn)這個(gè)成員變量到底是static變量呢,還是非static變量。所以說這會(huì)給程序員閱讀代碼帶來麻煩。

第二種方法是直接通過類來調(diào)用。也就說可以通過類名.成員變量的形式來加以調(diào)用。各位讀者知道為什么可以以這種形式加以調(diào)用呢?這主要是因?yàn)椋鶕?jù)這個(gè)類創(chuàng)建的對象,只要成員變量采用了關(guān)鍵字static修飾,他們他們指向的都是同一個(gè)變量。即系統(tǒng)只為他們分配了一份存儲空間。所以只通過類名就可以唯一的關(guān)聯(lián)到這個(gè)靜態(tài)的成員變量。而如果沒有利用static關(guān)鍵字修飾的成員變量就不行。因?yàn)榇藭r(shí)根據(jù)這個(gè)類創(chuàng)建的多個(gè)對象,其內(nèi)部的成員變量是各自獨(dú)立的,也就是說每個(gè)對象內(nèi)部的成員變量都有一個(gè)對應(yīng)的存儲位置。所以說,如果一個(gè)類有多個(gè)對象,那么就不能夠通過對象直接關(guān)聯(lián)到變量對應(yīng)的存儲位置了。系統(tǒng)不知道這個(gè)類對應(yīng)的對象到底是哪個(gè),即存在一對多的情況。而采用了static關(guān)鍵字修飾的變量,無論有多少個(gè)對象,其都是一對一的關(guān)系。所以,可以通過類名.成員變量名的方式來直接引用這個(gè)成員變量。

雖然兩種方法都可以實(shí)現(xiàn)對static變量的引用。但是筆者建議大家采用第二種方式。并不是說采用第二種方式更加的便捷或者說可以提高應(yīng)用程序的性能。筆者這么建議,主要是從代碼的閱讀性上來考慮的。如果采用對象名.成員變量這種形式來引用的話,那么就不怎么直觀的反應(yīng)這個(gè)變量的特殊性。而如果采用類名.成員變量的形式來引用的話,那么成語員就可以一目了然的知道這個(gè)成員變量就是靜態(tài)變量。這有利于代碼的閱讀與修改。

四、利用Static關(guān)鍵字來定義成員方法。

利用Static關(guān)鍵字來定義靜態(tài)的成員方法,其實(shí)跟靜態(tài)成員變量的定義類似。只需要在某個(gè)方法前面加上關(guān)鍵字static即可。不過在內(nèi)部的實(shí)現(xiàn)機(jī)制上,兩個(gè)還是有差別的。從以上的分析中可以看出,當(dāng)將某個(gè)成員變量定義為靜態(tài)變量時(shí),其實(shí)內(nèi)部數(shù)據(jù)創(chuàng)建的方式得到了改變。因?yàn)檎G闆r下,非靜態(tài)成員變量每個(gè)對象都有一個(gè)存儲空間,也就是說一個(gè)類如果有多少個(gè)對象則這個(gè)成員變量就有多少個(gè)存儲空間。而如果成員變量設(shè)置為靜態(tài)變量時(shí),則一個(gè)類中的一個(gè)靜態(tài)成員變量只有一個(gè)存儲空間。即使這個(gè)類創(chuàng)建了數(shù)百個(gè)對象,但是這個(gè)對象中的靜態(tài)成員變量也只有一個(gè)存儲空間。這就是靜態(tài)成員變量與非靜態(tài)成員變量的主要差異。但是如果將某個(gè)方法定義為靜態(tài)方法的話,差別就沒有這么大。這主要是因?yàn)榉椒ㄖ簧婕暗秸{(diào)用,很少涉及到存儲空間的分配。

而至于這個(gè)靜態(tài)方法的調(diào)用,跟靜態(tài)變量的調(diào)用相同。即可以利用對象名來調(diào)用,也可以利用類名來調(diào)用。同理,筆者建議是采用類名來調(diào)用,這可以強(qiáng)調(diào)靜態(tài)方法的靜態(tài)性。另外需要注意的是,創(chuàng)建靜態(tài)方法的一個(gè)重要的用途就是在不創(chuàng)建任何對象的情況下,就來調(diào)用靜態(tài)的方法。此時(shí)就只能夠通過類名來調(diào)用這個(gè)靜態(tài)方法。因?yàn)閷ο蟾緵]有被創(chuàng)建。

所以如果static關(guān)鍵字用于修飾成員變量,即把這個(gè)變量設(shè)置為靜態(tài)變量,這主要是用來解決多個(gè)對象共享同一個(gè)變量的需求。而將某個(gè)方法設(shè)置為靜態(tài)方法,這主要是用來在不創(chuàng)建任何對象的情況下就可以使用某個(gè)方法。故靜態(tài)變量與靜態(tài)方法雖然實(shí)現(xiàn)與引用的方式相同,但是兩者解決問題的側(cè)重點(diǎn)是不同的。


文章名稱:在Java類中靈活使用Static關(guān)鍵字
網(wǎng)頁URL:http://www.dlmjj.cn/article/dhgdggi.html