Dict.CN 在線詞典, 英語學(xué)習(xí), 在線翻譯

          都市淘沙者

          荔枝FM Everyone can be host

          導(dǎo)航

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          公告


          我的blog中的部分資源是來自于網(wǎng)絡(luò)上,如果你認為侵犯了你的權(quán)利,請及時聯(lián)系jelver#163.com,我會盡快刪除!另外如果要留言最好通過郵件的形式跟我交流因為我不是很經(jīng)常寫文章,前面有的朋友留言好久了我才發(fā)現(xiàn),所以對不住大家,現(xiàn)在留下MSN:jelver#163.com和QQ:253840881,歡迎交流! (用@代替#)

          隨筆分類

          文章分類

          隨筆檔案

          文章檔案

          相冊

          統(tǒng)計

          留言簿(23)

          積分與排名

          優(yōu)秀學(xué)習(xí)網(wǎng)站

          友情連接

          閱讀排行榜

          評論排行榜

          理解構(gòu)造器

          ??要學(xué)習(xí)Java,你必須理解構(gòu)造器。因為構(gòu)造器可以提供許多特殊的方法,這個對于初學(xué)者經(jīng)?;煜5?,構(gòu)造器和方法又有很多重要的區(qū)別。

          ?????我們說構(gòu)造器是一種方法,就象講澳大利亞的鴨嘴獸是一種哺育動物。(按:老外喜歡打比喻,我也就照著翻譯)。要理解鴨嘴獸,那么先必須理解它和其他哺育動物的區(qū)別。同樣地,要理解構(gòu)造器,那么就要了解構(gòu)造器和方法的區(qū)別。所有學(xué)習(xí)java的人,尤其是對那些要認證考試的,理解構(gòu)造器是非常重要的。下面將簡單介紹一下 ,最后用一個表作了些簡單的總結(jié)。


          一、功能和作用的不同
          構(gòu)造器是為了創(chuàng)建一個類的實例。這個過程也可以在創(chuàng)建一個對象的時候用到:Platypus p1 = new Platypus();

          相反,方法的作用是為了執(zhí)行java代碼。

          二、修飾符,返回值和命名的不同
          ????構(gòu)造器和方法在下面三個方面的區(qū)別:修飾符,返回值,命名。和方法一樣,構(gòu)造器可以有任何訪問的修飾: public, protected, private或者沒有修飾(通常被package 和 friendly調(diào)用). 不同于方法的是,構(gòu)造器不能有以下非訪問性質(zhì)的修飾: abstract, final, native, static, 或者 synchronized。

          返回類型也是非常重要的。方法能返回任何類型的值或者無返回值(void),構(gòu)造器沒有返回值,也不需要void。

          最后,談?wù)剝烧叩拿?gòu)造器使用和類相同的名字,而方法則不同。按照習(xí)慣,方法通常用小寫字母開始,而構(gòu)造器通常用大寫字母開始。構(gòu)造器通常是一個名詞,因為它和類名相同;而方法通常更接近動詞,因為它說明一個操作。

          三、"this"的用法
          ?????構(gòu)造器和方法使用關(guān)鍵字this有很大的區(qū)別。方法引用this指向正在執(zhí)行方法的類的實例。靜態(tài)方法不能使用this關(guān)鍵字,因為靜態(tài)方法不屬于類的實例,所以this也就沒有什么東西去指向。構(gòu)造器的this指向同一個類中,不同參數(shù)列表的另外一個構(gòu)造器,我們看看下面的代碼:

          public class Platypus {

          String name;

          Platypus(String input) {
          ??name = input;
          }

          Platypus() {
          ???this("John/Mary Doe");
          }

          ??public static void main(String args[]) {
          ????Platypus p1 = new Platypus("digger");
          ???Platypus p2 = new Platypus();
          ??}
          }

          ????在上面的代碼中,有2個不同參數(shù)列表的構(gòu)造器。第一個構(gòu)造器,給類的成員name賦值,第二個構(gòu)造器,調(diào)用第一個構(gòu)造器,給成員變量name一個初始值 "John/Mary Doe".

          在構(gòu)造器中,如果要使用關(guān)鍵字this,那么,必須放在第一行,如果不這樣,將導(dǎo)致一個編譯錯誤。

          四、"super"的用法
          ??????構(gòu)造器和方法,都用關(guān)鍵字super指向超類,但是用的方法不一樣。方法用這個關(guān)鍵字去執(zhí)行被重載的超類中的方法。看下面的例子:

          class Mammal {
          ???void getBirthInfo() {
          ??????System.out.println("born alive.");
          ???}
          }

          class Platypus extends Mammal {
          ???void getBirthInfo() {
          ?????System.out.println("hatch from eggs");
          ?????System.out.print("a mammal normally is ");
          ?????super.getBirthInfo();
          ???}
          }

          在上面的例子中,使用super.getBirthInfo()去調(diào)用超類Mammal中被重載的方法。

          構(gòu)造器使用super去調(diào)用超類中的構(gòu)造器。而且這行代碼必須放在第一行,否則編譯將出錯??聪旅娴睦樱?

          public class SuperClassDemo {
          ??SuperClassDemo() {}
          }

          class Child extends SuperClassDemo {
          ??Child() {
          ??????super();
          ??}
          }

          在上面這個沒有什么實際意義的例子中,構(gòu)造器 Child()包含了 super,它的作用就是將超類中的構(gòu)造器SuperClassDemo實例化,并加到 Child類中。

          五、編譯器自動加入代碼
          ?????編譯器自動加入代碼到構(gòu)造器,對于這個,java程序員新手可能比較混淆。當(dāng)我們寫一個沒有構(gòu)造器的類,編譯的時候,編譯器會自動加上一個不帶參數(shù)的構(gòu)造器,例如:public class Example {}
          編譯后將如下代碼:

          public class Example {
          ????Example() {}
          }

          在構(gòu)造器的第一行,沒有使用super,那么編譯器也會自動加上,例如:

          public class TestConstructors {
          ??TestConstructors() {}
          }

          編譯器會加上代碼,如下:

          public class TestConstructors {
          ??TestConstructors() {
          ????super();
          ??}
          }

          仔細想一下,就知道下面的代碼

          public class Example {}

          經(jīng)過會被編譯器加代碼形如:

          public class Example {
          ???Example() {
          ?????super();
          ???}
          }

          六、繼承
          ????構(gòu)造器是不能被繼承的。子類可以繼承超類的任何方法??纯聪旅娴拇a:

          public class Example {
          ??public void sayHi {
          ????system.out.println("Hi");
          ??}

          ??Example() {}
          }

          public class SubClass extends Example {
          }

          類 SubClass 自動繼承了父類中的sayHi方法,但是,父類中的構(gòu)造器 Example()卻不能被繼承。

          總結(jié)

          主題 構(gòu)造器 方法
          功能 建立一個類的實例 java功能語句
          修飾 不能用bstract, final, native, static, or synchronized
          返回類型 沒有返回值,沒有void 有返回值,或者void
          命名 和類名相同;通常為名詞,大寫開頭 通常代表一個動詞的意思,小寫開頭
          this
          指向同一個類中另外一個構(gòu)造器,在第一行
          指向當(dāng)前類的一個實例,不能用于靜態(tài)方法
          super 調(diào)用父類的構(gòu)造器,在第一行
          調(diào)用父類中一個重載的方法
          繼承 構(gòu)造器不能被繼承 方法可以被繼承

          編譯器自動加入一個缺省的構(gòu)造器
          自動加入(如果沒有) 不支持
          編譯器自動加入一個缺省的調(diào)用到超類的構(gòu)造器 自動加入(指super(),如果沒有) 不支持


          posted on 2006-04-26 16:29 都市淘沙者 閱讀(218) 評論(0)  編輯  收藏 所屬分類: Java Basic/Lucene/開源資料

          主站蜘蛛池模板: 全州县| 元阳县| 静宁县| 邳州市| 香港 | 奎屯市| 合肥市| 个旧市| 鹤岗市| 武穴市| 玛曲县| 安新县| 抚松县| 盘锦市| 洮南市| 宣城市| 卢氏县| 桓台县| 梅州市| 旌德县| 吉林省| 文化| 布拖县| 咸宁市| 屯留县| 贡嘎县| 沾化县| 大城县| 沾益县| 浦东新区| 桑日县| 平潭县| 河西区| 洪湖市| 兰溪市| 渑池县| 中宁县| 定襄县| 阿拉善盟| 汶川县| 凤翔县|