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

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

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

    ivaneeo's blog

    自由的力量,自由的生活。

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

    #

    下一個步驟是找出程序中對于舊函數(shù)的所有引用(reference)點,并修改它們,讓它們改用新函數(shù). 下面是原本的程序:
    class Customer...
    public String statement() {
        double totalAmount = 0;
        int frequentRenterPoints = 0;
        Enumeration rentals = _rentals.elements();
        String result = "Rental Record for * " + getName() + "\n";
        while(rentals.hasMoreElements()) {
           double thisAmount = 0;
           Rental each = (Rental)rentals.nextElement();    //取得一筆租借記錄

           thisAmount = amountFor(each);

           //   add frequent renter points(累加常客積點)
              frequentRenterPoints ++;
              if((each.getMovie().getPriceCode() == Movie.NEW_RELEASE) &&
                 each.getDaysRented() > 1)
                 frequentRenterPoints ++;

              result += "\t" + each.getMovie().getTitle() + "\t" +
                 String.valueOf(thisAmount) + "\n";
              totalAmount += thisAmount;
        }
    //   add footer lines(結(jié)尾打印)
        result += "Amount owed is " + String.valueOf(totalAmount) + " \n";
        result += "You earned " + String.valueOf(frequentRenterPoints) +
           "frequent renter points";
        return result;
    }

    本例之中,這個步驟很簡單,因為我才剛剛產(chǎn)生新函數(shù),只有一個地方使用了它.一般情況下你得在可能運用該函數(shù)的所有classes中查找一遍.
    class Customer
    public String statement() {
        double totalAmount = 0;
        int frequentRenterPoints = 0;
        Enumeration rentals = _rentals.elements();
        String result = "Rental Record for * " + getName() + "\n";
        while(rentals.hasMoreElements()) {
           double thisAmount = 0;
           Rental each = (Rental)rentals.nextElement();    //取得一筆租借記錄

           thisAmount = each.getCharge();

           //   add frequent renter points(累加常客積點)
              frequentRenterPoints ++;
              if((each.getMovie().getPriceCode() == Movie.NEW_RELEASE) &&
                 each.getDaysRented() > 1)
                 frequentRenterPoints ++;

              result += "\t" + each.getMovie().getTitle() + "\t" +
                 String.valueOf(thisAmount) + "\n";
              totalAmount += thisAmount;
        }
    //   add footer lines(結(jié)尾打印)
        result += "Amount owed is " + String.valueOf(totalAmount) + " \n";
        result += "You earned " + String.valueOf(frequentRenterPoints) +
           "frequent renter points";
        return result;
    }
    posted @ 2005-08-15 13:00 ivaneeo 閱讀(203) | 評論 (0)編輯 收藏

    搬移[金額計算]代碼
    觀察amountFor()時,我發(fā)現(xiàn)這個函數(shù)使用了來自Rental class的信息,卻沒有使用來自Customer class的信息.

    class Customer...
    public double amountFor(Rental aRental) {
        double result = 0;
        switch(aRental.getMovie().getPriceCode()) {   //取得影片出租價格
              case Movie.REGULAR:   //普通片
                 result+= 2;
                 if(aRental.getDaysRented() > 2)
                    result+= (aRental.getDaysRented() - 2) * 1.5;
                 break;
              case Movie.NEW_RELEASE:   //新片
                 result+= aRental.getDaysRented() * 3;
                 break;
              case Movie.CHILDRENS:   //兒童片
                 result+= 1.5;
                 if(aRental.getDaysRented() > 3)
                    result+= (aRental.getDaysRented() - 3) * 1.5;
                 break;
           }
        return result;
    }
    這立刻使我懷疑它是否被放錯了位置.大多數(shù)情況下,函數(shù)應(yīng)該放在它使用的數(shù)據(jù)的所屬object(或說class)內(nèi),所以amountFor()應(yīng)該移 到Rental class去.為了這么做,我要運用Move Method(142).首先把代碼拷貝到Rental class內(nèi),調(diào)整代碼使之適應(yīng)新家,然后重新編譯.下面這樣:

    class Rental...
    double getCharge() {
        double result = 0;
        switch(getMovie().getPriceCode()) {   //取得影片出租價格
              case Movie.REGULAR:   //普通片
                 result+= 2;
                 if(getDaysRented() > 2)
                    result+= (getDaysRented() - 2) * 1.5;
                 break;
              case Movie.NEW_RELEASE:   //新片
                 result+= getDaysRented() * 3;
                 break;
              case Movie.CHILDRENS:   //兒童片
                 result+= 1.5;
                 if(getDaysRented() > 3)
                    result+= (getDaysRented() - 3) * 1.5;
                 break;
           }
        return result;
    }
    這個例子里,[適應(yīng)新家]意味去掉參數(shù).此外,我還要在搬移的同時變更函數(shù)名稱.

    現(xiàn)在我可以測試新函數(shù)是否正常工作.只要改變Customer.amountFor()函數(shù)內(nèi)容,使它委托(delegate)新函數(shù)即可:

    class Customer...
        private double amountFor(Rental aRental) {
           return aRental.getCharge();
        }
    posted @ 2005-08-15 11:03 ivaneeo 閱讀(186) | 評論 (0)編輯 收藏

    實例代碼:
    public String statement() {
        double totalAmount = 0;
        int frequentRenterPoints = 0;
        Enumeration rentals = _rentals.elements();
        String result = "Rental Record for * " + getName() + "\n";
        while(rentals.hasMoreElements()) {
           double thisAmount = 0;
           Rental each = (Rental)rentals.nextElement();    //取得一筆租借記錄

           switch(each.getMovie().getPriceCode()) {   //取得影片出租價格
              case Movie.REGULAR:   //普通片
                 thisAmount += 2;
                 if(each.getDaysRented() > 2)
                    thisAmount += (each.getDaysRented() - 2) * 1.5;
                 break;
              case Movie.NEW_RELEASE:   //新片
                 thisAmount += each.getDaysRented() * 3;
                 break;
              case Movie.CHILDRENS:   //兒童片
                 thisAmount += 1.5;
                 if(each.getDaysRented() > 3)
                    thisAmount += (each.getDaysRented() - 3) * 1.5;
                 break;
           }

          
    //   add frequent renter points(累加常客積點)
              frequentRenterPoints ++;
              if((each.getMovie().getPriceCode() == Movie.NEW_RELEASE) &&
                 each.getDaysRented() > 1)
                 frequentRenterPoints ++;

              result += "\t" + each.getMovie().getTitle() + "\t" +
                 String.valueOf(thisAmount) + "\n";
              totalAmount += thisAmount;
        }

        //   add footer lines(結(jié)尾打印)
        result += "Amount owed is " + String.valueOf(totalAmount) + " \n";
        result += "You earned " + String.valueOf(frequentRenterPoints) +
           "frequent renter points";
        return result;
    }

    第一步驟是找出代碼的邏輯泥團并運用Extract Method(110).本例一個明顯的邏輯泥團就是switch語句,把它提煉(extract)到獨立函數(shù)中似乎比較好.

    首先我得在這段代碼里頭找出函數(shù)內(nèi)的局部變量(local variables)和參數(shù)(parameters).我找到了兩個:each和thisAmount,前者并未被修改,后者會被修改.任何不會被修改的 變量都可以被我當成參數(shù)傳入新的函數(shù),至于會被修改的變量就需格外小心.如果只有一個變量會被修改,我可以把它當作返回值.thisAmount是個臨時 變量,其值在每次循環(huán)起始處被設(shè)為0,并且在switch語句之前不會改變,所以我可以把新函數(shù)的返回值賦予它.

    public String statement() {
        double totalAmount = 0;
        int frequentRenterPoints = 0;
        Enumeration rentals = _rentals.elements();
        String result = "Rental Record for * " + getName() + "\n";
        while(rentals.hasMoreElements()) {
           double thisAmount = 0;
           Rental each = (Rental)rentals.nextElement();    //取得一筆租借記錄

           thisAmount = amountFor(each);

           //   add frequent renter points(累加常客積點)
              frequentRenterPoints ++;
              if((each.getMovie().getPriceCode() == Movie.NEW_RELEASE) &&
                 each.getDaysRented() > 1)
                 frequentRenterPoints ++;

              result += "\t" + each.getMovie().getTitle() + "\t" +
                 String.valueOf(thisAmount) + "\n";
              totalAmount += thisAmount;
        }
    //   add footer lines(結(jié)尾打印)
        result += "Amount owed is " + String.valueOf(totalAmount) + " \n";
        result += "You earned " + String.valueOf(frequentRenterPoints) +
           "frequent renter points";
        return result;
    }

    public double amountFor(Rental each) {
        double thisAmount = 0;
        switch(each.getMovie().getPriceCode()) {   //取得影片出租價格
              case Movie.REGULAR:   //普通片
                 thisAmount += 2;
                 if(each.getDaysRented() > 2)
                    thisAmount += (each.getDaysRented() - 2) * 1.5;
                 break;
              case Movie.NEW_RELEASE:   //新片
                 thisAmount += each.getDaysRented() * 3;
                 break;
              case Movie.CHILDRENS:   //兒童片
                 thisAmount += 1.5;
                 if(each.getDaysRented() > 3)
                    thisAmount += (each.getDaysRented() - 3) * 1.5;
                 break;
           }
        return thisAmount;
    }

    現(xiàn)在,已經(jīng)把原本的函數(shù)分為兩塊,可以分別處理它們.我不喜歡amountFor()內(nèi)的某些變量名稱,現(xiàn)在是修改它們的時候.
    下面是原本的代碼:
       public double amountFor(Rental each) {
        double thisAmount = 0;
        switch(each.getMovie().getPriceCode()) {   //取得影片出租價格
              case Movie.REGULAR:   //普通片
                 thisAmount += 2;
                 if(each.getDaysRented() > 2)
                    thisAmount += (each.getDaysRented() - 2) * 1.5;
                 break;
              case Movie.NEW_RELEASE:   //新片
                 thisAmount += each.getDaysRented() * 3;
                 break;
              case Movie.CHILDRENS:   //兒童片
                 thisAmount += 1.5;
                 if(each.getDaysRented() > 3)
                    thisAmount += (each.getDaysRented() - 3) * 1.5;
                 break;
           }
        return thisAmount;
    }

    下面是易名后的代碼:
    public double amountFor(Rental aRental) {
        double result = 0;
        switch(aRental.getMovie().getPriceCode()) {   //取得影片出租價格
              case Movie.REGULAR:   //普通片
                 result += 2;
                 if(aRental.getDaysRented() > 2)
                    result += (aRental.getDaysRented() - 2) * 1.5;
                 break;
              case Movie.NEW_RELEASE:   //新片
                 result += aRental.getDaysRented() * 3;
                 break;
              case Movie.CHILDRENS:   //兒童片
                 result += 1.5;
                 if(aRental.getDaysRented() > 3)
                    result += (aRental.getDaysRented() - 3) * 1.5;
                 break;
           }
        return result;
    }
    posted @ 2005-08-15 10:15 ivaneeo 閱讀(416) | 評論 (0)編輯 收藏

    1.邏輯泥團(logical clump),這里是指類似下面的邏輯混在一起的代碼:
    ...
        switch(each.getMovie().getPriceCode()) {
           case Movie.REGULAR:
              thisAmount += 2;
           .....
           case Movie.CHILDRENDS:
              thisAmount += 1.5;
              if(each.getDaysRented() > 3)
                 thisAmount += (each.getDaysRented() - 3)*1.5;
           break;
        }
    ...
    2.重構(gòu)名錄(refactoring catalog)是指常用的重構(gòu)方法列出的名錄.
    posted @ 2005-08-15 09:44 ivaneeo 閱讀(244) | 評論 (0)編輯 收藏

    快速而隨性地(quick and dirty)地設(shè)計一個簡單的程序并沒有錯.
    posted @ 2005-08-12 15:53 ivaneeo 閱讀(167) | 評論 (0)編輯 收藏

    1.首先,把windows的simsun.ttc文件考到指定目錄,重命名為simsun.ttf.


    2.注冊字體:到JAVA_HOME下的jre/lib/fonts下.編輯fonts.dir.具體如下:第一行的數(shù)字加一.在最后一行加入一句: simsun.ttf -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.
    可選字體的還有: simsun.ttf -SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0
                          simsun.ttf -misc-SimSun-medium-r-normal--*-%d-*-*-c-*-iso10646-1


    3.修改JAVA_HOME下的jre/lib/的font.properties文件(這里的font.properties文件最好做備份).
    ($cp -v font.properties.zh_CN.Sun font.properties)

    修改的地方有三處:
    A.類似如下的 serif.0=-b&h-lucidabright-medium-r-normal--*-%d-*-*-p-*-iso8859-1
    serif.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0
    看到xxxx.1=后面的字體全部改成已經(jīng)注冊的字體.

    B.類似如下的 fontset.serif.plain=\
    -b&h-lucidabright-medium-r-normal--*-%d-*-*-p-*-iso8859-1,\
    -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0
    fontset.serif.plain=\后的第二行字體全部改成注冊的字體.

    C.最后一行:appendedfontpath=/usr/share/fonts/truetype.這里的/usr/share/fonts/truetype是simsun.ttf的考到的目錄名.

    具體文件如下:
    # @(#)font.properties.zh_CN.Sun.linux    1.1 03/07/14
    # Copyright 2003 Sun Microsystems, Inc. All rights reserved.
    #

    # Component Font Mappings For Linux zh_CN
    #
    serif.0=-b&h-lucidabright-medium-r-normal--*-%d-*-*-p-*-iso8859-1
    serif.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    serif.italic.0=-b&h-lucidabright-medium-i-normal--*-%d-*-*-p-*-iso8859-1
    serif.italic.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    serif.bold.0=-b&h-lucidabright-demibold-r-normal--*-%d-*-*-p-*-iso8859-1
    serif.bold.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    serif.bolditalic.0=-b&h-lucidabright-demibold-i-normal--*-%d-*-*-p-*-iso8859-1
    serif.bolditalic.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    sansserif.0=-b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1
    sansserif.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    sansserif.italic.0=-b&h-lucidasans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1
    sansserif.italic.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    sansserif.bold.0=-b&h-lucidasans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1
    sansserif.bold.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    sansserif.bolditalic.0=-b&h-lucidasans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1
    sansserif.bolditalic.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    monospaced.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1
    monospaced.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    monospaced.italic.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1
    monospaced.italic.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    monospaced.bold.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1
    monospaced.bold.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    monospaced.bolditalic.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1
    monospaced.bolditalic.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    dialog.0=-b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1
    dialog.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    dialog.italic.0=-b&h-lucidasans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1
    dialog.italic.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    dialog.bold.0=-b&h-lucidasans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1
    dialog.bold.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    dialog.bolditalic.0=-b&h-lucidasans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1
    dialog.bolditalic.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    dialoginput.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1
    dialoginput.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    dialoginput.italic.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1
    dialoginput.italic.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    dialoginput.bold.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1
    dialoginput.bold.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    dialoginput.bolditalic.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1
    dialoginput.bolditalic.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    # Missing Glyph Character
    #
    default.char=274f

    # Component Font Character Encodings
    #
    fontcharset.serif.0=sun.io.CharToByteISO8859_1
    fontcharset.serif.1=sun.io.CharToByteGBK

    fontcharset.sansserif.0=sun.io.CharToByteISO8859_1
    fontcharset.sansserif.1=sun.io.CharToByteGBK

    fontcharset.monospaced.0=sun.io.CharToByteISO8859_1
    fontcharset.monospaced.1=sun.io.CharToByteGBK

    fontcharset.dialog.0=sun.io.CharToByteISO8859_1
    fontcharset.dialog.1=sun.io.CharToByteGBK

    fontcharset.dialoginput.0=sun.io.CharToByteISO8859_1
    fontcharset.dialoginput.1=sun.io.CharToByteGBK

    # Exclusion Ranges
    #

    # XFontSet Information
    #
    fontset.serif.plain=\
    -b&h-lucidabright-medium-r-normal--*-%d-*-*-p-*-iso8859-1,\
    -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    fontset.serif.italic=\
    -b&h-lucidabright-medium-i-normal--*-%d-*-*-p-*-iso8859-1,\
    -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    fontset.serif.bold=\
    -b&h-lucidabright-demibold-r-normal--*-%d-*-*-p-*-iso8859-1,\
    -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    fontset.serif.bolditalic=\
    -b&h-lucidabright-demibold-i-normal--*-%d-*-*-p-*-iso8859-1,\
    -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    fontset.sansserif.plain=\
    -b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\
    -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    fontset.sansserif.italic=\
    -b&h-lucidasans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\
    -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    fontset.sansserif.bold=\
    -b&h-lucidasans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\
    -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    fontset.sansserif.bolditalic=\
    -b&h-lucidasans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\
    -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    fontset.monospaced.plain=\
    -b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\
    -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    fontset.monospaced.italic=\
    -b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\
    -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    fontset.monospaced.bold=\
    -b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\
    -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    fontset.monospaced.bolditalic=\
    -b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\
    -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    fontset.dialog.italic=\
    -b&h-lucidasans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\
    -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    fontset.dialog.bold=\
    -b&h-lucidasans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\
    -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    fontset.dialog.bolditalic=\
    -b&h-lucidasans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\
    -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    fontset.dialog.plain=\
    -b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\
    -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    fontset.dialoginput.italic=\
    -b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\
    -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    fontset.dialoginput.bold=\
    -b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\
    -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    fontset.dialoginput.bolditalic=\
    -b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\
    -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    fontset.dialoginput.plain=\
    -b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\
    -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    fontset.default=\
    -b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\
    -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

    filename.-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.=/usr/share/fonts/truetype/simsun.ttf

    appendedfontpath=/usr/share/fonts/truetype



    posted @ 2005-08-11 13:38 ivaneeo 閱讀(723) | 評論 (0)編輯 收藏

    public class ReaderInputStream extends InputStream {
        protected Reader reader;
        protected ByteArrayOutputStream byteArrayOut;
        protected Writer writer;
        protected char[] chars;
        protected byte[] buffer;
        protected int index, length;

          /**
           * 帶Reader參數(shù)構(gòu)造函數(shù)
           *
           * @param reader - InputStream使用的Reader
           */
          public ReaderInputStream(Reader reader) {
            this.reader = reader;
            byteArrayOut = new ByteArrayOutputStream();
            writer = new OutputStreamWriter(byteArrayOut);
            chars = new char[1024];
          }

          /**
           * 帶Reader和字符編碼格式參數(shù)的構(gòu)造函數(shù)
           *
           * @param reader   - InputStream使用的Reader
           * @param encoding - InputStream使用的字符編碼格式.
           * @throws 如果字符編碼格式不支持,則拋UnsupportedEncodingException異常
           */
          public ReaderInputStream(Reader reader, String encoding)
              throws UnsupportedEncodingException {
            this.reader = reader;
            byteArrayOut = new ByteArrayOutputStream();
            writer = new OutputStreamWriter(byteArrayOut, encoding);
            chars = new char[1024];
          }

          /**
           * @see java.io.InputStream#read()
           */
          public int read() throws IOException {
            if (index >= length)
              fillBuffer();
            if (index >= length)
              return -1;
            return 0xff & buffer[index++];
          }

          protected void fillBuffer() throws IOException {
            if (length < 0)
              return;
            int numChars = reader.read(chars);
            if (numChars < 0) {
              length = -1;
            } else {
              byteArrayOut.reset();
              writer.write(chars, 0, numChars);
              writer.flush();
              buffer = byteArrayOut.toByteArray();
              length = buffer.length;
              index = 0;
            }
          }

          /**
           * @see java.io.InputStream#read(byte[], int, int)
           */
          public int read(byte[] data, int off, int len) throws IOException {
            if (index >= length)
              fillBuffer();
            if (index >= length)
              return -1;
            int amount = Math.min(len, length - index);
            System.arraycopy(buffer, index, data, off, amount);
            index += amount;
            return amount;
          }

          /**
           * @see java.io.InputStream#available()
           */
          public int available() throws IOException {
            return (index < length) ? length - index :
                ((length >= 0) && reader.ready()) ? 1 : 0;
          }

          /**
           * @see java.io.InputStream#close()
           */
          public void close() throws IOException {
            reader.close();
          }

    }
    posted @ 2005-08-11 09:27 ivaneeo 閱讀(2314) | 評論 (0)編輯 收藏

    1. 啟動emacs.
    2.打開jde-mode方式.
    3.在打開jde-abbrev-mode方式.

    然后輸入if,接著按空格鍵(輸入if的條件);展開if語句.
    if(i == 0) {
    }  //  end of if (i == 0)

    表 1.  Abbreviations

    語句Abbreviation
    if-thenif
    elseelse
    if-then-elseife
    else-ifeif
    whilewhile
    forfor
    for (int I=0;I<UL;I++)fori
    for (Iterator i = c.iterator(); i.hasNext();)foriter
    main methodmain
    switchswitch
    casecase
    trytry
    catchcatch
    try finallytryf
    finallyfinally

    posted @ 2005-08-09 11:01 ivaneeo 閱讀(168) | 評論 (0)編輯 收藏

    首先,需打開jde模式.(M-x jde-mode)


    在JDEE里注冊一個新的jdk:

    1. 打開emacs.

    2. 輸入 M-x customize-variable 并回車.

      Emacs 提示你要自定義的變量名.

    3. 輸入 jde-jdk-registry 并回車.

      jde-jdk-registry 的配置界面.

    4. INS 按鈕.

      顯示 JDK 項.

    5. 輸入JDK的版本號 和 JDK 的安裝路徑.

    6. 重復(fù)先前的步驟.

    7. State 按鈕.

      State 菜單顯示.

    8. 選擇 Save for Future Sessions .

      Note

      This saves the setting of jde-jdk-registry in your .emacs file.

    9. Finish button保存.

    選擇JDK

    選擇 JDK:

    1. 輸入 M-x customize-variable 并回車.

      Emacs 提示你要自定義的變量.

    2. 輸入 jde-jdk 并回車.

      jde-jdk 的配置界面.

      緩沖區(qū)里顯示注冊的jdk的列表.

    3. 按radio button 選擇你要使用的jdk.

    4. State 按鈕.

      State 菜單顯示.

    5. 選擇 Save for Future Sessions.

    6. 按  Finish 按鈕 保存設(shè)置.

    posted @ 2005-08-08 17:16 ivaneeo 閱讀(358) | 評論 (0)編輯 收藏

    我的java是jre1.4.2的.
    首先是進入firefox的插件目錄.我的是~/.mozilla/plugins.
    然后是確定jre的插件目錄.我的是~/programs/j2sdk1.4.2_08/jre/plugin/i386/ns610-gcc32.這里是使用gcc32的系統(tǒng).
    最后是做連接.具體如下:
    $cd ~/.mozilla/plugins
    $ln -s ~/programs/j2sdk1.4.2_08/jre/plugin/i386/ns610-gcc32/libjavaplugin_oji.so
    重起firefox,確定插件是否安裝成功.在firefox輸入about:plugins.有就成功了.
    posted @ 2005-08-08 14:54 ivaneeo 閱讀(990) | 評論 (0)編輯 收藏

    僅列出標題
    共67頁: First 上一頁 54 55 56 57 58 59 60 61 62 下一頁 Last 
    主站蜘蛛池模板: 国产精品偷伦视频观看免费| 国产精品亚洲二区在线观看| 中文在线免费不卡视频| 亚洲中文字幕久久久一区| 久久亚洲精品成人| 狠狠色婷婷狠狠狠亚洲综合| 两个人的视频高清在线观看免费 | 白白国产永久免费视频| 久久国产乱子免费精品| 永久免费精品影视网站| 亚洲欧美成人综合久久久| 亚洲日本视频在线观看| 亚洲av无码无在线观看红杏| 国产成人亚洲综合| 国产青草视频在线观看免费影院| 国产精品久久免费| 无码免费一区二区三区免费播放| 免费在线人人电影网| 国产成人va亚洲电影| 久久久久久亚洲精品无码| 国产成人亚洲合集青青草原精品 | 在线观看亚洲免费视频| 精品国产成人亚洲午夜福利| 亚洲精品福利网站| 亚洲国产精品久久久久网站| 亚洲色偷拍另类无码专区| 国产亚洲精品看片在线观看| 亚洲?V乱码久久精品蜜桃 | 亚洲VA中文字幕无码一二三区| 亚洲成aⅴ人片久青草影院| 免费一级毛片一级毛片aa| 国产男女猛烈无遮挡免费视频| 午夜视频免费观看| 大学生一级特黄的免费大片视频| 2021免费日韩视频网| 91成年人免费视频| 永久免费毛片在线播放| 成年午夜视频免费观看视频| 永久黄网站色视频免费观看| 在线视频观看免费视频18| 最新仑乱免费视频|