<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    weidagang2046的專欄

    物格而后知致
    隨筆 - 8, 文章 - 409, 評(píng)論 - 101, 引用 - 0
    數(shù)據(jù)加載中……

    Java構(gòu)造器和方法的區(qū)別

    摘要
    要學(xué)習(xí)Java,你必須理解構(gòu)造器。因?yàn)闃?gòu)造器可以提供許多特殊的方法,這個(gè)對(duì)于初學(xué)者經(jīng)常混淆。但是,構(gòu)造器和方法又有很多重要的區(qū)別。
    原作者:Robert Nielsen 原站:www.javaworld.com

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

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

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

    修飾符,返回值和命名的不同
    構(gòu)造器和方法在下面三個(gè)方便的區(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)造器通常是一個(gè)名詞,因?yàn)樗皖惷嗤欢椒ㄍǔ8咏鼊?dòng)詞,因?yàn)樗f明一個(gè)操作。

    "this"的用法
    構(gòu)造器和方法使用關(guān)鍵字this有很大的區(qū)別。方法引用this指向正在執(zhí)行方法的類的實(shí)例。靜態(tài)方法不能使用this關(guān)鍵字,因?yàn)殪o態(tài)方法不屬于類的實(shí)例,所以this也就沒有什么東西去指向。構(gòu)造器的this指向同一個(gè)類中,不同參數(shù)列表的另外一個(gè)構(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個(gè)不同參數(shù)列表的構(gòu)造器。第一個(gè)構(gòu)造器,給類的成員name賦值,第二個(gè)構(gòu)造器,調(diào)用第一個(gè)構(gòu)造器,給成員變量name一個(gè)初始值 "John/Mary Doe".

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

    "super"的用法
    構(gòu)造器和方法,都用關(guān)鍵字super指向超類,但是用的方法不一樣。方法用這個(gè)關(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)造器。而且這行代碼必須放在第一行,否則編譯將出錯(cuò)。看下面的例子:

    public class SuperClassDemo {
    SuperClassDemo() {}
    }

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

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

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

    public class Example {
    Example() {}
    }


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

    public class TestConstructors {
    TestConstructors() {}
    }

    編譯器會(huì)加上代碼,如下:

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

    仔細(xì)想一下,就知道下面的代碼

    public class Example {}

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

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

    繼承

    構(gòu)造器是不能被繼承的。子類可以繼承超類的任何方法。看看下面的代碼:

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

    Example() {}
    }

    public class SubClass extends Example {
    }

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

    總結(jié)

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

    posted on 2005-04-19 00:44 weidagang2046 閱讀(61127) 評(píng)論(0)  編輯  收藏 所屬分類: Java

    主站蜘蛛池模板: 精品久久久久久久免费加勒比| 亚洲综合AV在线在线播放| 一区二区三区视频免费| 亚洲乱码一区二区三区在线观看 | 国产在线19禁免费观看| 91福利免费网站在线观看| 亚洲专区一路线二| 亚洲综合AV在线在线播放| 久久不见久久见中文字幕免费| 你好老叔电影观看免费| 国产精品亚洲一区二区麻豆| 亚洲午夜福利717| 免费无码不卡视频在线观看| 久久久久久一品道精品免费看| 国产成人精品日本亚洲语音| 亚洲国产无套无码av电影| 免费毛片网站在线观看| 中国人xxxxx69免费视频| 一边摸一边爽一边叫床免费视频| 亚洲区视频在线观看| 国产gv天堂亚洲国产gv刚刚碰| 成人免费一区二区三区在线观看| 国产三级在线免费| 另类小说亚洲色图| 激情亚洲一区国产精品| 亚洲国产精品婷婷久久| 亚洲视频人成在线播放| 在线免费视频一区二区| 国产又大又粗又长免费视频| 免费国产污网站在线观看| 欧洲精品码一区二区三区免费看| 亚洲 日韩 色 图网站| 亚洲国产老鸭窝一区二区三区| 亚洲一区二区三区乱码A| 全免费a级毛片免费**视频| 天天影院成人免费观看| 国产麻豆一精品一AV一免费 | 中文字幕视频免费在线观看| 337P日本欧洲亚洲大胆艺术图| 中文字幕亚洲男人的天堂网络 | 亚洲国产综合精品|