亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Java構(gòu)造器和Static關(guān)鍵字的研究

        2014-04-29 00:00:00魏鋼
        計算機光盤軟件與應(yīng)用 2014年18期

        摘 要:Java語言通過構(gòu)造器完成數(shù)據(jù)初始化,在繼承過程中子類可以調(diào)用父類的構(gòu)造器。Static關(guān)鍵字可以定義靜態(tài)屬性、靜態(tài)方法和靜態(tài)代碼塊,也可以實現(xiàn)數(shù)據(jù)初始化,但與構(gòu)造器有所不同。通過對構(gòu)造器和Static關(guān)鍵字使用方法的研究,分析單態(tài)模式實現(xiàn)的過程。

        關(guān)鍵詞:構(gòu)造器;靜態(tài);單態(tài)模式

        中圖分類號:TP312.1

        Java語言屬于完全面向?qū)ο蟮木幊陶Z言,代碼設(shè)計的核心是類的設(shè)計。類的設(shè)計具有封裝的特性,在類中封裝了屬性的描述和方法的描述,在實例化對象過程中如果采用“對象名.屬性名”的方式進行顯示初始化賦值顯然不符合面向?qū)ο缶幊陶Z言封裝的特性,并且當類中屬性過多、實例多個對象時,賦值代碼會批量增多,書寫顯的十分臃腫。為了解決這個問題,Java語言提供了構(gòu)造器技術(shù)和靜態(tài)代碼塊技術(shù)實現(xiàn)屬性數(shù)據(jù)的隱式初始化功能,符合面向?qū)ο缶幊陶Z言封裝的特性。

        1 構(gòu)造器

        構(gòu)造器與普通方法不同,普通方法在使用時需要使用“對象名.方法名”進行顯示調(diào)用,而構(gòu)造器在對象實例化時能夠被Java虛擬機自動調(diào)用執(zhí)行,因此在構(gòu)造器中對屬性成員進行賦值就可以實現(xiàn)隱式自動初始化的功能。在定義上為了區(qū)別于普通方法,Java規(guī)定構(gòu)造器的名字必須與類的名字一致,沒有返回值,但也不能寫void,這樣的特殊書寫格式能夠被Java虛擬機識別[1]。

        在類的設(shè)計過程中如果沒有定義構(gòu)造器,默認類中包含一個空的構(gòu)造器,但設(shè)計者自定義構(gòu)造器之后,默認的空構(gòu)造器就不存了,如果使用者仍然使用空構(gòu)造器實例化對象,編譯系統(tǒng)就會報錯,提示空構(gòu)造器未定義。為了避免這種錯誤,在類的設(shè)計時必須手動編寫一個空構(gòu)造器。當需要設(shè)計多個構(gòu)造器時,可以應(yīng)用Java重載技術(shù),保證各個構(gòu)造器中參數(shù)的個數(shù)或類型不同,在實例化對象時,系統(tǒng)會按照參數(shù)的個數(shù)和類型進行匹配,找到相應(yīng)的構(gòu)造器執(zhí)行。在構(gòu)造器中形參命名習(xí)慣上與屬性命名相同,為了區(qū)分屬性與形參,可以使用this關(guān)鍵字,屬性名前加上“this.”同形參區(qū)別開來。此外,在構(gòu)造器中還可以調(diào)用構(gòu)造器,在同一類中構(gòu)造器調(diào)用構(gòu)造器采用“this(參數(shù)列表)”的格式書寫,并且語句必須位于構(gòu)造器中第一行,否則編譯系統(tǒng)會報錯,提示“Constructor call must be the first statement in a constructor”。在繼承過程中,子類能繼承父類的公有屬性和公有方法,但不能繼承父類的構(gòu)造器,可以使用super關(guān)鍵字使用“super(參數(shù)列表)”的格式調(diào)用父類構(gòu)造器。對于父類構(gòu)造器調(diào)用的語句也必須位于構(gòu)造器中的第一行。在設(shè)計父類時,最好編寫一個空構(gòu)造器,因為子類在繼承父類過程中,子類的各個構(gòu)造器在不指定調(diào)用父類指定構(gòu)造器時,編譯系統(tǒng)默認在子類的各個構(gòu)造器首行調(diào)用父類空構(gòu)造器,如果在父類中未找到空構(gòu)造器,編譯系統(tǒng)會報錯,提示“Implicit super constructor FatherClassName() is undefined. Must explicitly invoke another constructor”。如果在子類的構(gòu)造器中指定調(diào)用父類構(gòu)造器,默認的父類空構(gòu)造器就不在調(diào)用。

        2 Static關(guān)鍵字

        Java中屬性和方法通常是在實例化對象后通過“對象名.屬性名”和“對象名.方法名”進行引用,但對于公共的屬性和方法,可以通過Static關(guān)鍵字設(shè)置成靜態(tài)成員。對于靜態(tài)成員的引用除了用對象名引用方法外,還可以通過“類名.屬性名”和“類名.方法名”進行引用,由于不用實例化就可直接引用,因此靜態(tài)屬性和靜態(tài)方法又叫做類的屬性和類的方法。

        靜態(tài)屬性與非靜態(tài)屬性不同,除了可以被類直接引用特性外,在數(shù)據(jù)存儲上也有區(qū)別。對于非靜態(tài)屬性在實例化對象后,在堆內(nèi)存空間中開辟空間進行數(shù)據(jù)存儲,每實例化一個對象,就分配一份存儲空間,而靜態(tài)屬性在堆內(nèi)存空間中只開辟一次,即數(shù)據(jù)初始化只有一回,所有實例化的對象共享靜態(tài)屬性數(shù)據(jù)。

        靜態(tài)方法由于屬于類的方法,能夠被類直接引用,因此靜態(tài)方法中只能引用靜態(tài)屬性和其它靜態(tài)方法,而不能引用非靜態(tài)屬性和非靜態(tài)方法,因為直接使用類時,還沒有實例化對象,非靜態(tài)屬性和非靜態(tài)方法還沒有分配空間進行數(shù)據(jù)初始化,所以無法引用。而非靜態(tài)的方法中可以引用非靜態(tài)的成員,也可以引用靜態(tài)的成員,因為靜態(tài)的成員在非靜態(tài)方法之前初始化。對于main方法,格式為“public static void main(String[]args)”屬于靜態(tài)方法,因此包含main方法的類可以被Java虛擬機直接運行就是這個原理[2]。

        靜態(tài)代碼塊的格式為“static{代碼塊;}”,可以對靜態(tài)屬性進行數(shù)據(jù)初始化。但它與構(gòu)造器進行數(shù)據(jù)初始化不同,構(gòu)造器是調(diào)用一次,數(shù)據(jù)就初始化一次,而靜態(tài)代碼塊只初始化一次,并且在構(gòu)造器進行數(shù)據(jù)初始化之前完成。對于對象生成計數(shù)器類的設(shè)計可以定義一個靜態(tài)整型屬性用于計數(shù),可以應(yīng)用靜態(tài)代碼塊進行數(shù)據(jù)初始化為零,定義構(gòu)造器中對計數(shù)器進行自加操作。

        此外還可以用static定義靜態(tài)內(nèi)部類,對于靜態(tài)內(nèi)部類只能訪問外部類的靜態(tài)屬性和靜態(tài)方法。對于JDK5以上的版本還可以使用靜態(tài)導(dǎo)入技術(shù),這樣一來對于某一個類的所有靜態(tài)方法直接使用即可,簡化了代碼的書寫。

        3 單態(tài)模式

        單態(tài)模式就是在面向?qū)ο缶幊陶Z言中保證一個類只能產(chǎn)生一個實例,在數(shù)據(jù)庫連接、論壇帖子計數(shù)器中經(jīng)常用到,單態(tài)模式的使用節(jié)省了內(nèi)存,限制了實例化的個數(shù),便于垃圾回收,在Java中應(yīng)用構(gòu)造器和static靜態(tài)技術(shù)的組合就可以實現(xiàn)單態(tài)模式。要控制實例化個數(shù),只產(chǎn)生一個實例,就只能在類的內(nèi)部限制,因為在類的外部無法控制實例化的個數(shù),這個技術(shù)通過private關(guān)鍵字對構(gòu)造器私有化實現(xiàn),因為私有的成員只能在類的內(nèi)部使用,在其它類中將無法實例化私有構(gòu)造器的類。對于不經(jīng)過實例化就能用的成員只能是靜態(tài)成員,因此可以通過靜態(tài)屬性和靜態(tài)方法的使用在類中產(chǎn)生一個實例,實現(xiàn)單態(tài)模式[3]。Java對于單態(tài)模式的程序設(shè)計按照產(chǎn)生實例化對象的階段不同,可以分為兩種情況,一種是使用前產(chǎn)生,另一種是使用時產(chǎn)生。對于使用前產(chǎn)生在定義私有靜態(tài)屬性時就進行實例化賦值,通過公有的靜態(tài)方法返回實例對象,部分代碼如下:

        publicclass Singleton {

        privatestatic Singleton instance=new Singleton();

        private Singleton(){

        }

        publicstatic Singleton getInstance(){

        returninstance;

        }

        }

        另一種使用時實例化的方法是定義私有靜態(tài)屬性時并不實例化賦值,而是在公有的靜態(tài)方法返回實例對象時對靜態(tài)屬性判斷是否為空值,為空值時產(chǎn)生實例化并返回實例化對象。在設(shè)計靜態(tài)方法時要加上synchronized關(guān)鍵字保證線程是同步的,否則會出現(xiàn)多個實例化對象的產(chǎn)生。

        4 結(jié)束語

        Java中構(gòu)造器技術(shù)和static關(guān)鍵字功能充分體現(xiàn)了面向?qū)ο笳Z言的特性,全面的對構(gòu)造器技術(shù)和static關(guān)鍵字功能使用的研究,讓開發(fā)者更充分的理解單態(tài)模式的實現(xiàn)的原理,對進一步研究和使用Java技術(shù)奠定堅實的基礎(chǔ)。

        參考文獻:

        [1]魔樂科技軟件實訓(xùn)中心.Java從入門到精通[M].北京:人民郵電出版社,2010.

        [2]劉文杰,鄭玉,劉志昊.Java 7實用教程[M].北京:清華大學(xué)出版社,2013.

        [3]張孝祥.Java就業(yè)培訓(xùn)教程[M].北京:清華大學(xué)出版社,2003.

        作者簡介:魏鋼(1978.11-),男,遼寧盤錦人,講師,碩士,主要從事Java Web開發(fā)研究。

        作者單位:錦州師范高等??茖W(xué)校,遼寧錦州 121000

        国产精品一卡二卡三卡| 精品国产亚洲av麻豆尤物| 久久精品日本美女视频| 九一精品少妇一区二区三区| 亚洲国产色一区二区三区| 手机福利视频| 国产精自产拍久久久久久蜜 | 无套内谢老熟女| 亚洲麻豆视频免费观看| 免费观看交性大片| 福利体验试看120秒| 亚洲AV无码秘 蜜桃1区| 亚洲区福利视频免费看| 久久综合国产精品一区二区| 婷婷五月深深久久精品| 国语精品一区二区三区| 伊人久久亚洲综合影院首页| 亚洲视频不卡免费在线| 丝袜美腿人妻第一版主| 成年站免费网站看v片在线| 国产suv精品一区二人妻| 国产精品色内内在线播放| 中文字幕一区二区三区亚洲| 国产精品黑丝美女啪啪啪| 精品少妇一区二区三区免费观| 免费大片黄在线观看| 国产小视频一区二区三区| 日本一区二区免费高清| 亚洲av无码国产综合专区| а√天堂资源8在线官网在线| 亚洲第一区二区快射影院| 手机av在线播放网站| 欧美丰满熟妇xxxx性ppx人交| 黄色a级国产免费大片| 亚洲天天综合色制服丝袜在线| 亚洲av成人无网码天堂 | 久久久久亚洲av片无码下载蜜桃 | 男女男精品视频网站免费看| 亚洲日韩一区精品射精| a观看v视频网站入口免费| 一区二区三区国产亚洲网站 |