• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      Java中的構(gòu)造方法分析

      2012-04-29 18:05:01張紅霞
      電腦知識與技術(shù) 2012年26期
      關(guān)鍵詞:面向?qū)ο蟪绦蛟O(shè)計(jì)構(gòu)造方法繼承

      張紅霞

      摘要:構(gòu)造方法是Java語言中一個(gè)基本且重要的知識點(diǎn)。正確和熟練地使用構(gòu)造方法,對掌握J(rèn)ava和面向?qū)ο缶幊谭浅V匾?。文章介紹了構(gòu)造方法的概念和作用、對構(gòu)造方法的調(diào)用和繼承性進(jìn)行了詳細(xì)分析,并簡單介紹了構(gòu)造方法的訪問權(quán)限。

      關(guān)鍵詞:面向?qū)ο蟪绦蛟O(shè)計(jì);Java;構(gòu)造方法;繼承

      中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2012)26-6276-03

      Analysis about Constructor in Java

      ZHANG Hong-xia

      (Department of Computer Science, GuangXi University of Finance & Economics, Nanning 530003, China)

      Abstract: Constructor is a basic and important knowledge point in Java programming. Using constructor correctly and expertly is very important for mastering Java and Object-Oriented Programming. The article describes the concept and function of con? structor, analyses the calling and inheritance of constructor in detail, and simply introduces the access level of constructor.

      Key words: Object-Oriented Programming; Java; constructor; inheritance

      Java是一種純面向?qū)ο蟮木幊陶Z言。面向?qū)ο蟮囊粋€(gè)重要特征就是對相同類型的事物進(jìn)行分析抽象后形成類,類定義好后,將用于創(chuàng)建實(shí)例對象,程序的執(zhí)行則表現(xiàn)為對象之間的交互通信。在Java和C++等面向?qū)ο蟮木幊陶Z言中,創(chuàng)建對象是由構(gòu)造方法來完成的,因此,構(gòu)造方法是非常重要的內(nèi)容。由于各方面原因,目前國內(nèi)的很多Java教材在對構(gòu)造方法的介紹方面并不夠全面和詳細(xì),不利于初學(xué)者的學(xué)習(xí)和理解,本文對構(gòu)造方法的一些最基本的知識方面進(jìn)行了分析。

      1構(gòu)造方法的概念和作用

      類的構(gòu)造方法是方法名和類名完全相同,而且沒有返回值的一種特殊的方法。在Java中創(chuàng)建對象時(shí),編譯器會(huì)自動(dòng)調(diào)用相應(yīng)的構(gòu)造方法,為新建的對象分配存儲(chǔ)空間和對其中的成員變量進(jìn)行初始化??梢钥闯?,構(gòu)造方法的作用是確保程序中的每個(gè)對象都得到初始化,另外,構(gòu)造方法有助于減少錯(cuò)誤,并使代碼更容易閱讀。

      構(gòu)造方法的名字必須和類名相同,是由于以下原因:第一,除類名外,采用其它任何名字都可能與類中的某個(gè)成員名稱沖突;第二,構(gòu)造方法是由編譯器自動(dòng)調(diào)用的,所以必須讓編譯器知道應(yīng)該調(diào)用哪個(gè)方法,采用和類名相同的方法名自然最簡單并且更符合邏輯。

      構(gòu)造方法沒有返回值,這和返回值為空(void)是明顯不同的。構(gòu)造方法也不能被繼承。因此,構(gòu)造方法又不是方法,在很多資料中構(gòu)造方法又被稱為構(gòu)造器(Constructor)。

      2構(gòu)造方法的定義和調(diào)用

      由于構(gòu)造方法的重要性,Java中的每個(gè)類都會(huì)有一個(gè)或多個(gè)構(gòu)造方法。即使類的設(shè)計(jì)者沒有為類提供構(gòu)造方法,編譯器也會(huì)自動(dòng)提供一個(gè)默認(rèn)的無參的構(gòu)造方法,它的方法體為空,當(dāng)用這個(gè)類創(chuàng)建對象時(shí),編譯器會(huì)自動(dòng)調(diào)用該默認(rèn)的構(gòu)造方法。但要注意的是:一旦為類定義了構(gòu)造方法,編譯器就不再提供默認(rèn)的無參的構(gòu)造方法。如:

      public class Circle{

      float radius ;

      Circle(float r){

      radius=r; }//在Circle類中顯示定義了一個(gè)帶參數(shù)的構(gòu)造方法

      …}

      public class CircleTest{

      public static void main(String[] args){

      Circle c1=new Circle();//出錯(cuò)

      Circle c2=new Clrcle(5.5f);//正確,調(diào)用類中提供的帶參的構(gòu)造方法

      …}}

      以上程序中在“Circle c1=new Circle();”處會(huì)出現(xiàn)編譯錯(cuò)誤,這是因?yàn)轭愔幸呀?jīng)定義了一個(gè)帶參的構(gòu)造方法,此時(shí)編譯器就不再提供默認(rèn)的無參構(gòu)造方法了,自然也不能再去調(diào)用這個(gè)方法了。如果希望在以上程序中能繼續(xù)使用無參的構(gòu)造方法,可以在類中增加一個(gè)無參的構(gòu)造方法定義,如:

      public class Circle{

      float radius;

      Circle( ){ }//在Circle類中定義一個(gè)無參的構(gòu)造方法

      Circle(float r){

      radius=r; }//在Circle類中定義了一個(gè)帶參的構(gòu)造方法

      …}

      public class CircleTest{

      public static void main(String[] args){

      Circle c1=new Circle();//正確,調(diào)用類中無參的構(gòu)造方法

      Circle c2=new Clrcle(5.5f);//正確,調(diào)用類中帶1個(gè)參數(shù)的構(gòu)造方法

      …}}

      由上面的程序可以看出,構(gòu)造方法可以重載,即在一個(gè)類中可以定義多個(gè)構(gòu)造方法。同一個(gè)類中的多個(gè)構(gòu)造方法之間還可以通過this關(guān)鍵字互相調(diào)用。但需要注意:在一個(gè)構(gòu)造方法中只能調(diào)用一次其它的構(gòu)造方法,并且這個(gè)調(diào)用語句必須是該構(gòu)造方法的第一條語句。如:

      class Circle{

      float radius, area;

      Circle( ){//無參構(gòu)造方法

      System.out.println("This constructor has not parameter.");}

      Circle(float r){//帶參的構(gòu)造方法

      this();//通過this調(diào)用無參構(gòu)造方法,該語句必須位于方法中的第一行

      System.out.println("This constructor has a parameter,its "+r);

      radius=r; }

      }

      public class CircleTest{

      public static void main(String[] args){ Circle c1=new Circle(8.5f);

      }}

      該程序的運(yùn)行結(jié)果如下:

      This constructor has not parameter.

      This constructor has a parameter,its 8.5

      3構(gòu)造方法的繼承性

      Java中的構(gòu)造方法不能被繼承。但是當(dāng)子類創(chuàng)建對象時(shí),首先會(huì)自動(dòng)調(diào)用其父類中的構(gòu)造方法。所以雖然構(gòu)造方法不能被繼承,但父類中的構(gòu)造方法卻和子類對象的創(chuàng)建卻息息相關(guān)。現(xiàn)討論如下:

      如果子類的構(gòu)造方法中沒有用super關(guān)鍵字顯式調(diào)用父類的構(gòu)造方法,則子類的構(gòu)造方法會(huì)自動(dòng)調(diào)用父類中的無參構(gòu)造方法,如:

      class base{ }//父類base

      class derived extends base{//子類derived

      public static void main(String[] args){

      derived d=new derived();

      }

      }

      上述程序中父類和子類的構(gòu)造方法都是系統(tǒng)默認(rèn)的無參構(gòu)造方法,在創(chuàng)建子類對象時(shí),首先自動(dòng)調(diào)用父類中默認(rèn)的無參構(gòu)造方法,然后再調(diào)用子類中的默認(rèn)構(gòu)造方法。為了能看出這種自動(dòng)調(diào)用,我們?yōu)楦割惡土祟惗硷@式加上一個(gè)無參的構(gòu)造方法,程序如下:

      class base{

      base( )//父類中顯式提供了無參的構(gòu)造方法

      { System.out.println("base constructor"); }

      }

      class derived extends base{

      derived( )//子類的構(gòu)造方法中會(huì)自動(dòng)調(diào)用父類中的無參構(gòu)造方法

      { System.out.println("derived constructor"); }

      public static void main(String[] args){

      derived d=new derived();}

      }

      程序執(zhí)行后輸出結(jié)果如下:

      base constructor

      derived constructor

      由以上程序執(zhí)行結(jié)果可以看出構(gòu)造方法的調(diào)用過程。將上面的程序修改一下,讓父類中的構(gòu)造方法帶參數(shù),修改后的程序如下:

      class base{

      base(int i)//注意:父類中的構(gòu)造方法帶了參數(shù)

      { System.out.println("base constructor"); }

      }

      class derived extends base{

      derived()//注意:程序編譯時(shí)這里會(huì)出錯(cuò)

      {System.out.println("derived constructor"); }

      public static void main(String[] args){

      derived d=new derived();

      }

      }上述程序編譯時(shí)會(huì)出錯(cuò),這是因?yàn)楦割愔幸呀?jīng)定義了帶參的構(gòu)造方法,編譯器就不再提供默認(rèn)的構(gòu)造方法,所以在創(chuàng)建子類對象時(shí)自動(dòng)調(diào)用父類中的無參構(gòu)造方法時(shí)會(huì)出錯(cuò)。

      要解決這個(gè)問題,有兩種方法:一是為父類增加一個(gè)無參的構(gòu)造方法定義;二是在子類的構(gòu)造方法中用super(參數(shù))顯式調(diào)用父類中的帶參數(shù)的構(gòu)造方法,要注意的是:super(參數(shù))語句必須位于第一行,程序如下:

      class base{

      base(int i){ System.out.println("base constructor"); }

      }

      class derived extends base{

      derived(){

      super(8);//通過super調(diào)用父類中的構(gòu)造方法,該語句必須位于第一行

      System.out.println("derived constructor"); }

      public static void main(String[] args){

      derived d=new derived();

      }

      }

      4構(gòu)造方法的訪問權(quán)限

      構(gòu)造方法通常被聲名為public的,但實(shí)際上根據(jù)需要,構(gòu)造方法的訪問權(quán)限聲明為protected、private和默認(rèn)訪問級別都可以。比較特殊的是private級別的構(gòu)造方法,它和單態(tài)模式有關(guān),有興趣的讀者可以在這方面進(jìn)一步深入學(xué)習(xí)。

      5結(jié)束語

      在Java中,構(gòu)造方法是一個(gè)重要的基本知識,本文重點(diǎn)對構(gòu)造方法的調(diào)用和繼承問題等方面進(jìn)行了研究,但對于構(gòu)造方法的訪問權(quán)限、外部類和內(nèi)部類之間構(gòu)造方法的調(diào)用等內(nèi)容還需進(jìn)行分析和研究。全面、正確和熟練地掌握構(gòu)造方法,對掌握J(rèn)ava編程和面向?qū)ο缶幊谭浅V匾?/p>

      參考文獻(xiàn):

      [1]焦曉藝.Java中的構(gòu)造方法[J].山東輕工業(yè)學(xué)院學(xué)報(bào),2004,18(2):11-15.

      [2]耿祥義,張躍平.Java 2實(shí)用教程[M].北京:清華大學(xué)出版社,2010.

      [3]張桂珠,張平,陳愛國.Java面向?qū)ο蟪绦蛟O(shè)計(jì)[M].北京:北京郵電大學(xué)出版社,2010.

      [4] Eckel B. Java編程思想[M].陳昊鵬,譯.北京:機(jī)械工業(yè)出版社,2011.

      [5]王麗麗,海麗.Java語言中的構(gòu)造方法私有化[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2010(15):98-99.

      猜你喜歡
      面向?qū)ο蟪绦蛟O(shè)計(jì)構(gòu)造方法繼承
      DC-DC變換器分層級構(gòu)造方法
      《夢溪筆談》“甲子納音”構(gòu)造方法的數(shù)學(xué)分析
      基于MOOC的編譯原理分階段課程教學(xué)研究
      幾乎最佳屏蔽二進(jìn)序列偶構(gòu)造方法
      淺談杜審言、杜甫的祖孫關(guān)系:推崇、繼承、發(fā)展
      人間(2016年28期)2016-11-10 21:48:10
      淺論紫砂藝術(shù)的繼承與創(chuàng)新
      論電影《暮光之城》的哥特文化
      CDIO理念下《面向?qū)ο蟪绦蛟O(shè)計(jì)》教學(xué)改革研究
      科技視界(2016年16期)2016-06-29 21:58:51
      獨(dú)立學(xué)院面向?qū)ο蟪绦蛟O(shè)計(jì)教學(xué)模式的探討與實(shí)踐
      考試周刊(2016年43期)2016-06-18 17:32:22
      氣象科技史研究領(lǐng)域又一重要學(xué)術(shù)成果
      红安县| 加查县| 桐柏县| 南阳市| 赤城县| 绵竹市| 乐至县| 祁连县| 宜州市| 修武县| 娄烦县| 镇安县| 合山市| 历史| 从化市| 瓦房店市| 景泰县| 乐昌市| 四川省| 云霄县| 潞城市| 共和县| 轮台县| 泉州市| 嘉义市| 贵溪市| 绥德县| 龙海市| 涿鹿县| 鄂伦春自治旗| 南江县| 江都市| 高安市| 独山县| 布尔津县| 哈尔滨市| 龙游县| 都江堰市| 合江县| 兴义市| 称多县|