程序手記

          程序是我畢生的追求......
          隨筆 - 19, 文章 - 0, 評論 - 9, 引用 - 0
          數(shù)據(jù)加載中……

          JAVA基礎(chǔ) (包 與 Java API) 第二天 第四天

              建立Java包,布局源文件和設(shè)置classpath參數(shù)之間相互影響。也相互關(guān)聯(lián)。正確建立和導(dǎo)入JAVA包,合理布局源文件,準(zhǔn)確設(shè)置CLASSPATH參數(shù),才能保證應(yīng)用程序順利執(zhí)行,并有效管理應(yīng)用程序。

          包的建立方法
              Java包通過package語句建立,基本語法是:
                  package cn.edu.jmu.graphis;
              在定義類或接口的源文件開始處,通過package語句,可以將相應(yīng)的類或接口放入package所聲明的包里。包是相關(guān)類和接口的集合,提供了訪問級別控制和命名控件管理。

          包的使用方法
              每個源文件只能有一個包聲明,并且一定要求放在源文件的開始位置。如果一個源文件沒有包語句,則源文件所定義的類或接口唄系統(tǒng)放入默認(rèn)包中。包有層次,層次間由點(diǎn)分隔。
              例如有一組與圖形相關(guān)的類,包括Circles,Rectangles,Lines和points類等,描述了畫圖所用到的各種圖形組件,另有抽象類Graphic標(biāo)識圖形組件的共性,接口Draggable表示用戶可以通過鼠標(biāo)拖拽成圖的圖形組件。在這種情況下,我們不僅需要,而且也應(yīng)該將這些相關(guān)類和接口組成包,可命名為graphics如:

          //Graphics.java
          package graphics;
          public abstract class Graphic{
              ...
          }

          //Circle.java
          package graphics;
          public class Circle extends Graphic implements Draggable {
              ...
          }

          //Rectangle.java
          package graphics;
          public class Rectangle extends Graphic implements Draggable {
              ...
          }

          //Draggable.java
          package graphics;
          public interface Draggable{
              ...
          }
              通過創(chuàng)建和使用包,程序員不僅可以很容易地確定哪些類和接口是相關(guān)的,也可以很容易地找到提供特定功能的類和接口,例如,與畫圖有關(guān)的類和接口在graphics包中。

          包的訪問權(quán)限
              通過聲明類的訪問級別,可以控制對類的訪問權(quán)限。
              類的訪問級別分為默認(rèn)級和public級。定義類的默認(rèn)訪問級別不需要任何關(guān)鍵字,唄聲明為默認(rèn)級的類只對同一個包中的類是可視的。也就是說只有同一個包內(nèi)的類實(shí)例可以訪問這個類,外界不能訪問它。如果用關(guān)鍵字public定義類,不但同一個包里的其他類可以訪問這個類,其他包中的類也可以訪問它。換句話說,同一個包中的類,相互之間有不受限制的訪問權(quán)限。而在不同包中,只有public類可以被訪問。
              public修飾符不知用于定義類的訪問控制級別,也可以應(yīng)用于接口,方法或變量。public 接口同public類一樣,可以由應(yīng)用程序中的任何類訪問。而public方法或public屬性對任何可以訪問他的類或接口都是可視的。
              除public修飾符之外,用于訪問控制的修飾符還有protected 和 private。
          protected 或 private 僅用來定義方法或變量的訪問控制級別。protected 方法或protected變量僅對同一個包內(nèi)的類或不同包中的子類來說是可視的。
          private方法和pvivate變量對外部定義的類均不可視。

          包的命名方式
              包提供了心的命名控件,即使所定義的類使用與其他包中的類相同的名字,只要包類所屬的包不同名,就不會引起沖突。原因是這些類的全程限定名稱不同。類的全程限定包含了類的各層包名。這實(shí)質(zhì)上是應(yīng)用了面向?qū)ο蟮母拍睿瑢㈩惙庋b入包中。

          包的訪問權(quán)限
              通過聲明類的訪問級別,可以控制對類的訪問權(quán)限。
              類的訪問級別分為默認(rèn)級和public級。定義類的默認(rèn)訪問級別不需要任何關(guān)鍵字,貝聲明為默認(rèn)級的類只對同一個包中的類是可視的。也就是說,只有同一個包內(nèi)的類實(shí)例可以訪問這個類,外界不能訪問它。如果用關(guān)鍵字public 定義類,不但同一個包里的其他類可以訪問這個類,其他包中的類也可以訪問它。換句話說,同一個包中的類,相互之間有不受限制的訪問權(quán)限。而在不同的包中,只有public類可以被訪問。
              public 修飾符不只用于定義類的訪問控制級別,也可以應(yīng)用于接口,方法和變量。public接口同public類一樣,可以由應(yīng)用程序中的任何類訪問。而public方法或public變量對任何可以訪問他的類或接口都是可視的。
              除public 修飾符之外,用于訪問控制的修飾符還有 protected 和private 。 protected或private僅用來定義方法或變量的訪問控制級別。protected方法或protected變量僅對同一個包內(nèi)的類或不同包中的子類來說是可視的。private方法和private變量對外部定義的類均不可視。需要說明的是,通常不建議用默認(rèn)方式定義方法或成員變量的訪問級別。

                                
              對于沒有指定包名的java源文件,系統(tǒng)認(rèn)為他們都屬于同一個默認(rèn)的包。如果沒有把自己的Java類放入某個包中,那么任何默認(rèn)包里的對象都可以訪問它,并且不局限于同一個子目錄下,因此通常應(yīng)該在每個Java源文件的項(xiàng)目頂部使用 package語句,指明它所屬的包。

          訪問包成員
              對于包來說,只有它的public成員可貝外界訪問。若外界想要訪問包的public類,有3種方式可以實(shí)現(xiàn)。
              (1)通過類的全程限定名訪問該類。
              (2)通過import語句導(dǎo)入該類。
              (3)通過import語句導(dǎo)入整個包。
              如果某個類只貝訪問一次,那么可以直接使用類的全名。例如訪問cn.edu.jmu.graphics.Graphic類可以用一下方式:
              cn.edu.jmu.graphics.Graphic aGraph = new cn.edu.jmu.graphics.Graphic();
              這條語句創(chuàng)建了 cn.edu.jmu.graphics.Graphic類型的對象 aGraph。
              可以看到,即是指創(chuàng)建一個對象,在變量定義和初始化時(shí)也用到兩次全名。當(dāng)使用Java約定的包命名方式時(shí),包名可能過長,此時(shí)用起來就更顯得繁瑣,容易出錯,也影響可讀性。
              通常都應(yīng)該使用import語句直接導(dǎo)入所需類,或者導(dǎo)入該類所在的包。導(dǎo)入之后,程序中設(shè)計(jì)的這個類的地方就可以直接用類名訪問。
              import 的基本語法形式為:
              import <包名>[.<子包名>].<類名>;    //導(dǎo)入指定類
          或者:
              import <包名>[.<子包名>].*;    //導(dǎo)入整個包
          例如:
              import cn.edu.jmu.javaprogs.Timel;
              import cn.edu.jmu.javaprogs.*;
              import java.awt.*;
              import java.awt.event.*;

              import語句在package 語句之后,所有的類聲明之前。由于集中在程序首部,宜于直觀地了解程序所需的包,有助于維護(hù)程序的可移植性。
              import 語句中的 * 用來匹配包中的所有類,但并不能用來匹配包中的所有類的某個子集。如語句
              import java.awt.*;
              導(dǎo)入java.awt包中的所有類。如果這樣的語句
              import java.awt.A*;
              它無法導(dǎo)入java.awt句中首字母為A的所有子類,相反還會出現(xiàn)編譯錯誤,也就是說,使用import語句一次只能導(dǎo)入包的單一成員,或者導(dǎo)入整個包。
              還有語句
              import java.awt.*;
              所導(dǎo)入的是java.awt包中的所有類,它包括接口。但不包括java.awt包中的子包。如果需要訪問java.awt.event子包中的類,仍需要用 import語句導(dǎo)入 java.awt.event子包。所以常常使用如下形式:
              import java.awt.*;
              import java.awt.event.*;

            

          包的布局
              類的全程受名稱與類所在目錄一一對應(yīng),例如:
              import graphics.Rectangle    等同于文件路徑名:
              Graphics\Rectangle.java


          classpath參數(shù)
              classpath參數(shù)用于設(shè)置Java包所在的頂級目錄。也就是說,通過classpath可以為Java包建立所依存的目錄列表。編譯和運(yùn)行Java 程序時(shí),系統(tǒng)會自動從classpath環(huán)境變量中讀取包所在的目錄,文件所在目錄由系統(tǒng)通過classpath中的目錄和package語句中定義的目錄合成。
              下面通過一個完整的實(shí)例程序,說明classpath參數(shù)的作用,同時(shí)展示源文件和字節(jié)碼文件的一種建議布局模式。
              程序包含兩個類 Time 和 TestTime,TestTime為主類。程序?qū)τ脩糨斎氲谋硎拘r(shí)、分鐘和秒鐘的3個整型數(shù),經(jīng)過數(shù)據(jù)正確性驗(yàn)證,分別轉(zhuǎn)換為通用時(shí)間表示格式和標(biāo)準(zhǔn)時(shí)間表示格式,通過對話框顯示給用戶,運(yùn)行后如圖:
                                                                                

              文件布局方式如下:創(chuàng)建 d:\javaSample 目錄存放java程序,創(chuàng)建 d:\javaSample\src 子目錄存放源文件,創(chuàng)建d:\javaSample\class 子目錄存放編譯后的字節(jié)碼文件。 具體實(shí)現(xiàn)方式是將文件 TestTime.java 存放在 D:\javaSample\src 子目錄下,為使 src 子目錄的結(jié)構(gòu)與 class 子目錄結(jié)構(gòu)相對應(yīng),創(chuàng)建 D:\javaSample\src\cn\edu\jmu\timer 子目錄存放 Time.java文件。類Time和類TestTime的布局如圖:
                                        
              Time.java中的語句
              package cn.edu.jmu.timer;
              將Time類放入包c(diǎn)n.edu.jmu.timer中,源文件Time.java存放在與包相對應(yīng)的目錄結(jié)構(gòu)下。在類TestTime.java中通過語句   import cn.edu.jmu.timer.Time;   導(dǎo)入Time類。
              需要設(shè)置classpath參數(shù),規(guī)定程序中的包    cn.edu.jmu.timer 編譯所依存的頂級目錄為 d:\javaSample\class,如:
                          set classpath = d:\javaSample\class;
              編譯:
                  javac -d d:\javaSample\class
                  d:\javaSample\src\cn\edu\jmu\timer\Time.java 
                  javac -d d:\javaSample\class d:\javaSample\src\TestTime.java
              運(yùn)行:
                  java TestTime

          posted @ 2008-08-03 00:40 程序手記 閱讀(358) | 評論 (0)編輯 收藏

          JAVA面向?qū)ο缶幊?(接口) 第二天

              接口是JAVA語言中非常重要的概念,回調(diào)是軟件設(shè)計(jì)中常用的模式。JAVA的接口不僅可以用來實(shí)現(xiàn)多繼承關(guān)系,也用來實(shí)現(xiàn)回調(diào)機(jī)制。 java.lang.Comparable 接口和 java.util.Comparator 接口是進(jìn)行數(shù)據(jù)對象比較和排序中需要實(shí)現(xiàn)的接口,他們在功能和使用方法上都有所不同。

              當(dāng)類只從一個類繼承時(shí)稱為單繼承,JAVA語言只允許單繼承。如果需要多繼承關(guān)系,可以通過JAVA語言中的接口實(shí)現(xiàn)。
              抽象方法只有方法定義,沒有方法體,如果一個類包含任何抽象方法,包括直接的和繼承所得,則這個類必須是抽象的。如果一個類是抽象的,則不能創(chuàng)建此類的對象。抽象類強(qiáng)制要求他的所有子類重寫自己的方法以覆蓋抽象方法。
              如果存在超類 Animal,顯然cat同時(shí)具有 Animal和pet的特性,就是說,cat不只是一個animal還是一個pet,除需要繼承animal類,還期望能實(shí)現(xiàn)pet類。因?yàn)镴AVA只允許單繼承,CAT不能繼承animal又繼承pat,解決這個問題的方法是定義接口,并通過接口實(shí)現(xiàn)多繼承。

          定義接口
              我們把只有抽象方法和常量的抽象類稱為接口,接口形式化定義了一組相互有關(guān)系的未實(shí)現(xiàn)的方法。接口的定義包括接口聲明和接口體。
          接口聲明的語法為:[public] interface 接口名 [extends 父接口名] {。。。。。。}
              EXTENDS子句與類聲明的extends子句基本相同,不同的是:一個接口可以有多個父接口,用逗號隔開,而一個類只能有一個父類。
              接口體包括常量和抽象方法。
             
          接口Pet示例:

              interface Pet{
                  public abstract void speak();
              }
              public class Dog implements Pet{
                  public void speak(){
                      System.out.println("Woof");
                  }
              }
              public class Cat implements Pet{
                  public void speak(){
                      System.out.println("Meow");
                  }
              }
              public class Bird implements Pet{
                  public void speak(){
                      System.out.println("Tweedle");
                  }
              }
              public class TestAnimals{
                  public static void main(String args[]){
                      Pet myPets = new Pet[4];
                      myPets[0] = new Bird();
                      myPets[1] = new Cat();
                      myPets[2] = new Bird();
                      myPets[3] = new Dog();
                      
                      for(int index = 0; index<4; index++){
                          myPets[index].speak();
                      }
                  }
              }


              類Bird ,Cat 和 Dog 與 Pet 不再具有父子關(guān)系,而分別是實(shí)現(xiàn)了接口Pet的類。
              一個接口的定義由關(guān)鍵字 interface 開始,包括一套 public ,abstract 方法,接口也可以包含 public ,final,static數(shù)據(jù)。一個期望使用接口的類必須將自己聲明為 implements 接口,并重寫接口定義的每個方法,保證參數(shù)列表及返回類型與接口中所定義的相一致。簡單說,強(qiáng)制要求實(shí)現(xiàn)接口的類覆蓋接口的方法。
              如果一個類沒有覆蓋接口定義中的全部方法,那么這個類就稱為抽象類,必須貝聲明為 abstract。

          用Cat類繼承Animal 類 和 定義Pet接口的示例:
          public class Cat extends Animal implements Pet{
              public void speak(){//實(shí)現(xiàn)
          }
          }

          posted @ 2008-08-02 18:01 程序手記 閱讀(250) | 評論 (0)編輯 收藏

          JAVA (繼承,封裝,多態(tài),接口) 第二天

              面向?qū)ο蟮姆治雠c設(shè)計(jì)(OOA&D)方法是一種非常成熟的技術(shù)。也是當(dāng)前商業(yè)公司經(jīng)常使用的一種技術(shù),因?yàn)镴AVA語言本身就是一種面向?qū)ο蟮恼Z言,所以掌握面向?qū)ο筮@種技術(shù)對于JAVA語言的應(yīng)用具有重要意義。

          繼承(inheritance)
              繼承是使用已存在的類的定義作為基礎(chǔ)建立新類的技術(shù),新類的定義可以增加新的數(shù)據(jù)或新的功能,也可以用父類的功能,但不能選擇性地繼承父類。這種技術(shù)使得復(fù)用以前的代碼非常容易,能夠大大縮短開發(fā)周期,降低開發(fā)費(fèi)用。比如可以先定義一個類叫車,車有以下屬性:車體大小,顏色,方向盤,論壇,而又由車這個類派生出教程和卡車兩個類,為轎車添加一個小后備箱,而為卡車添加一個大貨箱。

          封裝(encapsulation)
              類使得數(shù)據(jù)和對數(shù)據(jù)的操作集成在一起,從而對使用該類的其他人來說,可以不管它的實(shí)現(xiàn)方法,而只管用它的功能,從而實(shí)現(xiàn)所謂的信息隱藏。

          多態(tài)(polymorphism)
              多態(tài)又分為設(shè)計(jì)時(shí)多態(tài)和運(yùn)行時(shí)多態(tài),例如重載又被稱為設(shè)計(jì)時(shí)多態(tài),而對于覆蓋或繼承的方法,JAVA運(yùn)行時(shí)系統(tǒng)根據(jù)調(diào)用該方法的實(shí)例的類型來決定選擇調(diào)用哪個方法則被稱為運(yùn)行時(shí)多態(tài)。總而言之,面向?qū)ο蟮脑O(shè)計(jì)的典型特點(diǎn)就是繼承,封裝和多態(tài),這些特點(diǎn)也是面向?qū)ο笾阅苋绱耸⑿械年P(guān)鍵所在。

          單繼承與多繼承
              JAVA不支持多重繼承,單繼承使JAVA的繼承關(guān)系很簡單,一個類只能有一個父類,易于管理程序,同時(shí)一個類可以實(shí)現(xiàn)多個接口,從而克服單繼承的缺點(diǎn)。

              接口的定義和類的定義很相似,只是關(guān)鍵字不同,關(guān)鍵字為interface。生命格式如下:
          interface 接口名
          {
          }
              上面的大括號中為接口體。接口體中包含成員變量定義和方法定義兩部分。
              接口體中只進(jìn)行方法的聲明,不允許提供方法的實(shí)現(xiàn)。所以在格式上只存在方法聲明,實(shí)際上沒有方法體,而方法體要在實(shí)現(xiàn)的類中再去具體定義。
              還有一點(diǎn)需要說明的是:如果一個類使用了某個接口,就必須要實(shí)現(xiàn)這個接口的所有方法,即使實(shí)在沒有內(nèi)容只是一個空的方法體也不許要寫。而且每個方法都默認(rèn)是public的,所以實(shí)現(xiàn)時(shí)代碼一定要用public做修飾,參數(shù)個數(shù),類型以及返回值的類型都必須與接口中的聲明相一致。
          例如:
              interface Runable
              {
              }
              當(dāng)某個類要實(shí)現(xiàn)這個接口時(shí),就用 imlements 來聲明。
              例如,我們相做一個多線程的例子,那么就可有兩種實(shí)現(xiàn)方式,一種是通過定義一個Thread類的子類來實(shí)現(xiàn),另一種是通過實(shí)現(xiàn)Runable接口來實(shí)現(xiàn)。代碼如下(這里的PrintHello類就是通過實(shí)現(xiàn)Runable接口來實(shí)現(xiàn)的,而不是擴(kuò)展Thread稱為他的子類):

          import java.lang.*;

          class TestThread
          {
              public static void main(String args[])
              {
                  try{
                      printHello ph = new PrintHello();
                      Thread Tph = new Thread(ph);
                      for(;;){
                          System.out.println("I'm main");
                          Thread.sleep(100);
                      }
                  }
                  catch(Exception e){
                      e.printStackTrace();
                  }
              }
          }

          class PrintHello implements Runnable
          {
              public void run(){
                  try{
                      for(;;){
                          System.out.println("I'm hello");
                      }
                  }
                  catch(Exception e){
                      e.printStackTrace();
                  }
              }
          }

          posted @ 2008-08-02 16:34 程序手記 閱讀(7212) | 評論 (0)編輯 收藏

          JAVA基礎(chǔ) (數(shù)據(jù)類型轉(zhuǎn)換) 第二天

              很多場合都要用到類型轉(zhuǎn)換,JAVA的類型轉(zhuǎn)換有下列兩種。

          自動類型轉(zhuǎn)換

              整型,實(shí)型,字符型數(shù)據(jù)可以混合運(yùn)算。在運(yùn)算過程中,不同類型的數(shù)據(jù)會自動轉(zhuǎn)換為同一類型,然后進(jìn)行運(yùn)算。自動轉(zhuǎn)換按低級類型數(shù)據(jù)轉(zhuǎn)換成高級類型數(shù)據(jù)的規(guī)則進(jìn)行,
          轉(zhuǎn)換規(guī)則為:
          (1)(byte 或 short)op int -> int
          (2)(byte 或 short 或 int) op long -> long
          (3)(byte 或 short 或 int 或 long) op float -> float
          (4)(byte 或 short 或 int 或 long 或 float)op double ->double
          (5)char op int ->int

          其中,箭頭左邊表示參與運(yùn)算的數(shù)據(jù)類型,op為運(yùn)算符如加減乘除等,右邊表示運(yùn)算結(jié)果的數(shù)據(jù)類型。
          如: 3+4.5 是 double型,所以3貝轉(zhuǎn)換為double型,然后再與4.5相加,其結(jié)果也為double型。

          強(qiáng)制類型轉(zhuǎn)換

              高級數(shù)據(jù)類型你個要轉(zhuǎn)換成低級數(shù)據(jù)類型,需要用到強(qiáng)制類型轉(zhuǎn)換。其一般形式為:
          (類型名)表達(dá)式
          例如:
              int i;
              byte b;
              i = 356;
              b=(byte)i; //強(qiáng)制轉(zhuǎn)換吼丟失一部分?jǐn)?shù)據(jù),使得b的值為100
              一般使用強(qiáng)制類型轉(zhuǎn)換可能會導(dǎo)致數(shù)值溢出或精度下降,應(yīng)盡量避免。

          posted @ 2008-08-02 15:18 程序手記 閱讀(161) | 評論 (0)編輯 收藏

          JAVA類型 (String類 和 StringBuffer類) 第二天

          String 類

              String 類提供了幾種字符串創(chuàng)建方法。

              String s = "abcd" 使用字符串常量自動創(chuàng)建String實(shí)例。
              String s = new String(String s)通過String 對象或字符串常量傳遞給構(gòu)造方法。
              public String (char value[],int offset, int count)將字符數(shù)組一部分賦給String 構(gòu)造方法,offset 為起始下表, count 為數(shù)組長度。



              String 類提供了豐富的字符串操作方法,其中重要的例舉如下。

              public int lenght() 返回字符串的長度。
              public char charAt(int index) 返回字符串位置index處的字符。
              public boolean equals(Object o) 比較兩個字符串對象,相等則返回true;反之返回false。
              public int compareTo(String s) 比較兩個字符串字典順序,相等返回0,s大于當(dāng)前字符串返回一個負(fù)值,s小于當(dāng)前串返回一個正值。
              public boolean regionMatches(int toffset,String other,int ooffset,int len)從當(dāng)前字符串位置toffset開始尋找字符串other中起始位置為ooffset 長度為len 的子串。如發(fā)現(xiàn)匹配,返回true; 否則,返回false。
              public boolean startsWith(String prefix) 從當(dāng)前字符串的起始位置開始尋找字符串 prefix。如發(fā)現(xiàn)匹配,返回true;否則,返回false。
              public boolean endsWith(String suffix) 如當(dāng)前字符串的結(jié)尾子串與 suffix 匹配,返回true;否則,返回false。
              public int indexOf(String str) 在當(dāng)前字符串中尋找與str匹配的子串,返回首次匹配的起始下表值;無匹配返回-1。
              public String substring(int beginIndex,int endIndex) 在當(dāng)前字符串中,求從起始位置 beginIndex 到結(jié)束位置 endIndex 的子串。
              public String concat(String str) 將當(dāng)前字符串與str連接,返回連接后的字符串。
              public String toLowerCase() 將當(dāng)前字符串全轉(zhuǎn)換為小寫形式。
              public String toUpperCase() 將當(dāng)前字符串轉(zhuǎn)換為大寫形式。
              public char toCharArray() 將當(dāng)前字符串轉(zhuǎn)換為字符數(shù)組。
              public Static String valueOf(type variable) 把variable 轉(zhuǎn)換為字符串,其中 type 表示 variable 的數(shù)據(jù)類型。






          StringBuffer類

              String類實(shí)現(xiàn)一種不能改變的靜態(tài)字符串,StringBuffer類實(shí)現(xiàn)一種動態(tài)可以改變的字符串。StringBuffer類可以用于創(chuàng)建String類,StringBuffer一旦建立,可以用toString()方法將其轉(zhuǎn)換為String類,以后,就可以使用String 類方法來操作。 
              
              StringBuffer 類提供了三種創(chuàng)建方法。

              public StringBuffer()    創(chuàng)建一個空的StringBuffer類。
              public StringBuffer(int length)    創(chuàng)建一個大小為length的StringBuffer類。
              public StringBuffer(String str)    按str創(chuàng)建一個動態(tài)可變的StringBuffer類。


              StringBuffer    類提供的方法主要用于把輸入的數(shù)據(jù)轉(zhuǎn)換為String類。輸入數(shù)據(jù)可來自鍵盤或其他數(shù)據(jù)源。類型可以是字符,字符數(shù)組,證書,浮點(diǎn)數(shù)和Object類型等。

              public int length()    返回緩沖區(qū)的字符數(shù)
              public int capacity()    返回緩沖區(qū)的容量大小,其值為:字符串長度+16。
              public synchronized StringBuffer append(type variable)    把variable轉(zhuǎn)換為字符串,然后與當(dāng)前字符串連接。
              public synchronized StringBuffer append(Char(char ch))    把字符ch連接到當(dāng)前串尾。
              public synchronized StringBuffer insert(int offset,type variable)    把variable轉(zhuǎn)換為字符串,然后插入到當(dāng)前串中由offset指定的位置。
              public synchronized StringBuffer insert(int offset,char ch)    把字符 ch 插入到當(dāng)前串由ofset指定的位置。
              public synchronized String toString()    把StringBuffer轉(zhuǎn)換為字符串String。各個方法的使用,具體請參閱 JAVA API文檔。

          posted @ 2008-08-02 11:57 程序手記 閱讀(708) | 評論 (0)編輯 收藏

          JAVA程序的執(zhí)行 (OBJECT類) 第二天

              Object類是JAV類庫中的一個特殊的類,它是類庫中所有類的父類,也是用戶自定義的所有類的直接或間接父類。也就是說,用戶定義的所有類在默認(rèn)情況下都是Object類的子類,無論用戶是否顯示生命Object類作為自己定義的類的父類。這是系統(tǒng)自動完成的,由此,通過把Object類稱為通用超類。
              Object類中的成員方法恰好都是方法,其中有7個public類型的,2個protected類型的。用戶自定義的所有類都將繼承這些方法。Object類中的7個public類型的方法分別是tostring(0方法,equals()方法,getclass()方法,含水層哦的()方法,notify()方法,notifyall()方法,和wait()方法,2個protected類型的方法是clone()方法和finalize()方法。
              其中toString()方法和equals()方法較為常用
          toString()方法 較為簡單,略過。
          equals()方法
              Object類的equals()方法用戶比較以參數(shù)傳過來的對象和當(dāng)前對象,如果他們是相同的對象(不僅是相等,而且必須是同一個對象),則返回true;如果他們是不同的對象,即使兩者的數(shù)據(jù)成員相等,也將返回false。

          equals()方法的格式
          test t = new test();
          test t2 = new test();

          if(t.equals(t2)){
              true;
          }else{
              false;
          }

          posted @ 2008-08-02 11:18 程序手記 閱讀(162) | 評論 (0)編輯 收藏

          面向?qū)ο缶幊?(抽象類 最終類 權(quán)限修飾 對象) 第一天 第二天

              抽象與封裝是面向?qū)ο蟪绦蛟O(shè)計(jì)的兩個重要概念。類將數(shù)據(jù)以及對數(shù)據(jù)的操作封裝在一個抽象數(shù)據(jù)類型中,為屬于該類的所有對象提供了同意的抽象描述。

              理解抽象與封裝的概念,掌握J(rèn)AVA中的類與對象的應(yīng)用,能夠運(yùn)用面向?qū)ο笏枷脒M(jìn)行類的設(shè)計(jì),正確設(shè)計(jì)類中的成員方法和成員變量,是我們學(xué)習(xí)的目標(biāo)。

           

              面向?qū)ο笫且环N新型的程序設(shè)計(jì)方法,或者說是一種心的程序設(shè)計(jì)規(guī)范,其基本思想是實(shí)用對象、類、繼承、封裝、消息等基本概念來進(jìn)行程序設(shè)計(jì)。從顯示世界中客觀存在的事務(wù)(即對象)出發(fā)來構(gòu)造軟件系統(tǒng),并且在系統(tǒng)構(gòu)建中盡可能運(yùn)行人類的自然思維方式。

              面向?qū)ο蟮脑O(shè)計(jì)方法用對象描述事物,而每個具體的對象又可以用兩個特征來描述:描述事物靜態(tài)屬性所需的數(shù)據(jù)結(jié)構(gòu)以及對這些數(shù)據(jù)進(jìn)行的有限操作。也就是說,把數(shù)據(jù)結(jié)構(gòu)和對數(shù)據(jù)的操作放在一起構(gòu)成一個整體,才能完整地反應(yīng)實(shí)際問題。數(shù)據(jù)結(jié)構(gòu)和對數(shù)據(jù)的操作實(shí)際上是相互以來不可分割的整體。

              面向?qū)ο蟪绦蛟O(shè)計(jì)具有抽象、封裝、集成和多態(tài)4個特點(diǎn)。抽象去掉了被研究對象中與主旨無關(guān)的次要部分,而僅僅抽取出與研究工作有關(guān)的實(shí)質(zhì)性的內(nèi)容加以考慮。抽象有兩類:一類是過程抽象,另一類是數(shù)據(jù)抽象。

              面向?qū)ο蟪绦蛟O(shè)計(jì)強(qiáng)調(diào)數(shù)據(jù)抽象,數(shù)據(jù)抽象把系統(tǒng)總需要處理的數(shù)據(jù)和這些數(shù)據(jù)上的操作結(jié)合在一起,根據(jù)功能、性質(zhì)、作用等因素抽象成不同的抽象數(shù)據(jù)類型。每個抽象數(shù)據(jù)類型既包含數(shù)據(jù),又包含針對這些數(shù)據(jù)的操作,是相對于過程抽象更為嚴(yán)格的抽象方法。

           

          封裝

              封裝就是利用抽象數(shù)據(jù)類型把數(shù)據(jù)和基于數(shù)據(jù)的操作封裝在一起,數(shù)據(jù)被保護(hù)在抽象數(shù)據(jù)類型的內(nèi)部,系統(tǒng)的其他部分只有通過數(shù)據(jù)的操作,才能夠于這個抽象數(shù)據(jù)類型進(jìn)行交互,封裝包含兩層含義。

              第一,把對象的全部屬性及其行為結(jié)合在一起,形成一個不可分割的獨(dú)立單位(即對象)。

              第二,信息隱蔽,即盡可能隱蔽對象的內(nèi)部細(xì)節(jié),對外形成一個邊界(或者說形成一道屏障),只保留有限的對外接口,使之與外部發(fā)生聯(lián)系。

              封裝的原則在軟件上的反應(yīng)是:對象以外的部分不能隨意存取對象的內(nèi)部數(shù)據(jù)(屬性),從而有效地避免了外部錯誤對他的“交叉感染”,使軟件錯誤能夠局部化,大大減少查錯和排錯難度。

             在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,抽象數(shù)據(jù)類型是用“類”這種面向?qū)ο蠊ぞ弑硎镜模總€類里都防撞了相關(guān)的數(shù)據(jù)和操作。封裝性降低了程序開發(fā)過程的復(fù)雜性,提高了效率和質(zhì)量,保證了數(shù)據(jù)的完整性和安全性。同時(shí),封裝性提高了抽象數(shù)據(jù)類型的可重用性,使抽象數(shù)據(jù)類型稱為一個結(jié)構(gòu)完整、能夠自行管理的有機(jī)整體。

           

              把眾多的事物歸納、劃分成一些類,是人類在認(rèn)識客觀世界時(shí)經(jīng)常采用的思維方法。分類的原則是抽象。類是一組對象的集合,它為屬于該類的所有對象提供了統(tǒng)一的抽象描述,其內(nèi)部包括屬性和服務(wù)兩個主要部分。在面向?qū)ο蟮木幊陶Z言中,類是一個獨(dú)立的程序單位行為。類的實(shí)例化結(jié)果就是對象,而對一類對象的抽象就是類。

              類的定義

              類是JAVA的核心和本質(zhì),想要在JAVA程序中實(shí)現(xiàn)的每個概念,都必須封裝自愛類中。類是具有共同屬性和行為的對象的抽象,屬性描述了對象的狀態(tài),以數(shù)據(jù)的形式存在,在JAVA面向?qū)ο蟪绦蛟O(shè)計(jì)中又貝稱為變量。行為描述了對數(shù)據(jù)進(jìn)行的操作,可引起對象狀態(tài)的改變。在JAVA面向?qū)ο蟪绦蛟O(shè)計(jì)中貝稱為方法。

              JAVA中類的實(shí)現(xiàn)包括兩個部分:類頭和類體。類頭定義的格式如下:

           [類定義修飾符] class <類名> [extends <父類名>] [implements <接口列表>]

              類的定義主要包括關(guān)鍵詞 class 和類名。類名是JAVA語言合法的標(biāo)識符,類名一般具有一定的含義。其中,CLASS為定義類的關(guān)鍵字,extends是用于繼承的關(guān)鍵字,implements是用于實(shí)現(xiàn)接口的關(guān)鍵字,有關(guān)類的修飾符后面將詳細(xì)闡述。

              類體是類的主體部分,它包含了所有實(shí)現(xiàn)類功能的JAVA語言程序代碼,包括成員變量和成員方法。JAVA類除了繼承它的父類中的變量和方法外,一般仍會在類體中明確定義自己的變量和方法。程序中,變量說明應(yīng)放在定義之前。類體要用{}括起來。類體的格式如下:

          class <類名>{

               [變量修飾符] <變量內(nèi)省> <變量名>

               [方法修飾符] <方法返回值類型> <方法名>([<參數(shù)列表>]){

                    方法體

               }

          }

           

              其中,變量名是JAVA語言中的合法標(biāo)識符,變量的類型可以是JAVA給定的任意數(shù)據(jù)類型或者用戶自定義類。用于說明變量和方法的訪問權(quán)限等屬性。

           

          一個簡單的學(xué)生類:

          //**********Student.java*********

          //學(xué)生類的定義

          import java.io.*; //加載系統(tǒng)輸入輸出類

          public class Strdent{

               /*類成員的定義*/

               private String name;    //成員變量

               private String sex;     //成員變量

               rivate int number;     //成員變量

               void setValue(String a, String b, int c)//成員方法

               {

                    name = a;

                    sex = b;

                    number = c;

               }

               public int getNumber()     //成員方法

               {

                    return number;

               }

               public static void main(String args[])       //成員方法

               {

                    //打印輸出一行字符

                    System.out.println("這是一個學(xué)生類的定義!");

               }

          }// Student 類結(jié)束

           

              //代表JAV語言中的單行注釋。

              /*   */ 之間的部分是多行注釋。

             

          類的修飾符

              類的修飾符說明類的性質(zhì)和訪問權(quán)限,分為訪問控制符和非訪問控制符,包括

           public 、protected 、 private 、abstract  和 final 。

              1. public , protected 和 private

              public , protected 和 private 說明類的訪問權(quán)限,屬于訪問控制符。

              用public修飾的類,不僅能貝同一包中其他類訪問,還能貝包之外的類和對象使用。

              protected 修飾的類為保護(hù)類,可貝同包類和異包子類訪問。

              private 修飾符的類為似有類,外界無法訪問。

           

              共有類的定義。

          //*******TestPublic.java*******

          //共有類的定義

          import java.io.*; //加載系統(tǒng)輸入輸出類

          public class TestPublic

          {

               /*每個類的main()方法是該程序的入口,而包含main方法的類是程序的主類。

          main()方法的形式是 public static void main(String args[]) */

               public static void main(String args[])

               {

                    System.out.println("這是一個共有類");

               }

          }

              下面定義一個名為TestProtectedAndPrivate的類來測試保護(hù)類和似有類。

          保護(hù)類和似有類的定義:

          //*************TestProtectedAndPrivate.java**********

          //保護(hù)類和似有類的定義

          import java.io.*;  //加載系統(tǒng)輸入輸出類

          public class TestProtectedAndPrivate{

               //主方法

               public static void main(String args[]){

                    //分別創(chuàng)建保護(hù)類和似有類的對象t1和t2

                    TestProtected t1 = new TestProtected();

                    TestPrivate t2 = new TestPrivate();

           

                    //打印輸出兩行字符

                    System.out.println(t1.toString());

                    System.out.println(t2.toString());

               }

               protected static class TestProtected     //保護(hù)類

               {

                    public String toString(){

                         return "保護(hù)類的定義:作為潛逃類的內(nèi)部類";

                    }

               }

               private static class TestPrivate      //似有類

               {

                    public string toString(){

                         return "私有類的定義:作為嵌套類的內(nèi)部類";

                    }

               }

          }     // TestProtectedAndPrivate 類結(jié)束

           

           

          aabstract

              abstract 說明一個類為抽象類,所謂抽象類是指不能直接實(shí)例化對象的類。如果一個抽象類貝說明了,則這個類中將包括一個或幾個抽象方法。所謂抽象方法是指該方法只有方法說明卻沒有方法體,即沒有具體實(shí)現(xiàn)的代碼。抽象類本身不具備實(shí)際功能,它只用于衍生子類。定義抽象類和抽象方法的目的是建立抽象模型。抽象類中不一定包含抽象方法,但一旦某個類中說明了抽象方法,該類必須說明為抽象類。

           

          不包含抽象方法的抽象類的定義。

          //*************TestAbstract.java*************

          //不包含抽象方法的抽象類

          import java.io.*; //加載系統(tǒng)輸入輸出類

          public abstract class TestAbstract{

               //該類不包含抽象方法

           

               //主方法

               public static void main(String args]){

                    //打印輸出兩行字符

                    System.out.println("這是一個不包含抽象方法的抽象類!");

                    System.out.println("抽象類不能創(chuàng)建對象!");

               }

          } // TestAbstract 類結(jié)束

           

          包含抽象方法的抽象類的定義。

          //********** Mankind.java **********

          //包含抽象方法的抽象類

               import java.io.*; //加載系統(tǒng)輸入輸出類

               public abstract class Mankind{

                    //定義4個抽象方法

                    public abstract void closing();

                    public abstract void food();

                    public abstract void shelter();

                    public abstract void transportation();

           

                    //主方法

                    public static void main(String args[]){

                         //打印輸出兩行字符

                         System.out.println("這是一個包含抽象方法的抽象類");

                         System.out.println("抽象方法沒有方法體");

                    }

               }//  Mankind 類結(jié)束

           

           

          final

               final 修飾的類又稱為最終類,是指該類不能被繼承,不能再有子類。它的目的是為了避免盲目繼承。一個final類無法貝繼承,意味著此類在一個繼承樹中是一個葉子類,并且此類的設(shè)計(jì)已貝認(rèn)為很具體而不需要進(jìn)行修改或擴(kuò)展。對于final類中的成員變量,可以定義其為final,也可以不是final。而對于方法,由于所屬類為final的關(guān)系,自然也就成了final類型。也可以明確地給final類中的方法加上一個final關(guān)鍵字。下面定義一個名為TestFinal的最終類。

          //************* TestFinal.java ***************

          //最終類的定義

          import java.io.*; //加載系統(tǒng)輸入輸出類

          public final class TestFinal

          {

               //主方法

               public static void main(String args[]){

                    //打印輸出一行字符

                    System.out.println("這是一個最終類,不能被繼承");

               }

          }//TestFinal類結(jié)束

           

          因?yàn)槌橄箢惖哪康木褪菫榱吮焕^承,而最終類的目的是不讓其貝繼承,所以一個類是不能用 abstract 和 final 同時(shí)修飾的。

           

           

           

          對象

              對象是具有某些特俗屬性(數(shù)據(jù))和行為方式(操作)的實(shí)體。對象可以是有生命的個體,比如一個人或一只老虎;還可以是無生命的個體,比如一輛汽車或一臺計(jì)算機(jī);也可以是一個抽象的概念,如天氣的變化或鼠標(biāo)產(chǎn)生的事件。對象有兩個特征:屬性(property)和行為(Behavior)。例如,一個人的屬性有姓名、性別、年齡、身高、體重等;行為有唱歌、打球、騎車和學(xué)習(xí)等。

              類是一個抽象的概念,而對象是一個具體的概念,是類實(shí)例化的結(jié)果。對象通過消息傳遞來進(jìn)行交互。消息傳遞即激活指定的某個對象的方法以改變其狀態(tài)或讓它產(chǎn)生一定的行為。

           

          對象的生命與引用

              同基本內(nèi)置類型一樣,為了聲明對象,首先必須寫出類型名,然后寫出該類型的所有變量的名字,中間用逗號隔開。下面舉例說明怎樣生命一個類的對象:

          Student s1, s2, s3;

              上面的生命表示s1\s2\s3是 Student 類型的引用變量,可以用來引用Student型的對象。引用變量的值將對應(yīng)一個內(nèi)存地址,這個地址標(biāo)識的空間用來存放一個Student對象。

              聲明對象的引用變量,并不等于創(chuàng)建對象,當(dāng)然更沒有為對象分配存儲空間。這些需要通過 new 關(guān)鍵詞和對引用變量的賦值才能實(shí)現(xiàn)。

           

          創(chuàng)建對象與定義構(gòu)造方法

              在JAVA語言中,一個JAVA對象是類的一個實(shí)力,創(chuàng)建對象的過程是對類的實(shí)例化過程,實(shí)例化對象就是創(chuàng)建一個對象。實(shí)例化對象意味著給對象分配必要的存儲空間,用來保存對象的變量和方法大媽。new 運(yùn)算符用于創(chuàng)建一個類的實(shí)例并返回對象的引用,即用來實(shí)現(xiàn)對象的實(shí)例化。一般格式為:

          <類名>   <對象名>  =   new  <類名>(<參數(shù)列表>);

              創(chuàng)建對象與生命基本數(shù)據(jù)類型的變量相似,首先說明新建對象所屬的類名,然后說明該對象名,賦值號左邊的NEW 關(guān)鍵字是用于為新建對象開辟內(nèi)存空間的運(yùn)算符。與變量相比,對象占用的內(nèi)存空間要大得多,因?yàn)閷ο蠹劝兞坑职椒ǎ鄶?shù)情況下,變量與方法還不止一個。例如前面定義的學(xué)生類 Strdent,假設(shè)有一個對象s1,則它就有3個屬性和2個方法: s1.name  ,s1.sex,  s1.number, s1.setValue(),  s1.getNumber() 。這些變量和方法保存在一塊內(nèi)存中,這塊內(nèi)存就是對象s1 所占用的內(nèi)存。如果在新建另一個 Strdent類的對象 s2,則s2對象將在內(nèi)存中擁有自己的與s1對象不同的位置相同大小的內(nèi)存空間。

              創(chuàng)建對象的同時(shí)要調(diào)用這個對象的構(gòu)造方法完成對象的初始化工作,JAVA語言中每一個類都有構(gòu)造方法,該方法是一種特殊的方法,其特殊性主要體現(xiàn)在以下幾個方面。

          (1) 構(gòu)造方法的名稱與類的名稱相同。

          (2) 構(gòu)造方法不返回任何數(shù)據(jù)類型,也就沒有返回值。

          (3) 構(gòu)造方法的修飾符只能是訪問修飾符,即 public ,private,protected 中的任一個。

          (4) 構(gòu)造方法只能由 new 運(yùn)算符調(diào)用,一般不能由編程人員顯式地直接調(diào)用。

          (5) 構(gòu)造方法不能從父類中繼承。而在構(gòu)造方法中可以調(diào)用但前父類和其父類的另一個構(gòu)造方法,調(diào)用語句必須是構(gòu)造方法的第一條語句。使用當(dāng)前類的構(gòu)造方法用this來引用,使用其父類的構(gòu)造方法用 super 來引用,在構(gòu)造方法的實(shí)現(xiàn)中,可以進(jìn)行方法的重載。

              下面定義一個 Student 類,該類具有兩個構(gòu)造方法,方法的名稱都是 Student,與類名相同。

           

          public class Student{

               //成員變量

               private String name;

               private String sex;

               private int number;

               

               //成員方法

               Student()     //構(gòu)造方法

               {

                    name = "NO name";

                    sex = "unknown";

                    number = 0;

               }

               Student(String a, String b, int c)//構(gòu)造方法

               {

                    name = a;

                    sex = b;

                    number = c;

               }

          }// Student 類結(jié)束

           

          構(gòu)造方法的重載。

          //************* TestConstructor.java ***************

          //構(gòu)造方法的重載

          import java.io.*; //加載系統(tǒng)輸入輸出類

          class Constructor{

               //成員變量

               private int x;

               private double y;

           

               //沒有參數(shù)的構(gòu)造方法

               Constructor()

               {

                    x = 0;

                    y = 0.0;

               }

               

               //一個參數(shù)的構(gòu)造方法

               Constructor(int x){

                    this.x = x; //使用 this 關(guān)鍵字標(biāo)識成員變量,以區(qū)別于同名參數(shù)

               }

           

               //一個參數(shù)的構(gòu)造方法,參數(shù)類型于前一個構(gòu)造方法不同

               Constructor(double y){

                    this.y = y;

               }

           

               //兩個參數(shù)的構(gòu)造方法

               Constructor(int x, double y){

                    this.x = x;

                    this.y = y;

               }

           

               // print() 方法顯示成員變量

               void print()

               {

                    System.out.println("x=" +x+"    y="+y);

               }

          }    // Constructor 類結(jié)束

           

           

           

          // ConstructorTest 類

          public class TestConstructor

          {

               //主方法

               public static void main(String args[]){

                    //創(chuàng)建 Constructor 類的對象 c1 c2 c3 c4 分別使用了不同的構(gòu)造方法

                    Constructor c1 = new Constructor();

                    Constructor c2 = new Constructor(53);

                    Constructor c3 = new Constructor(6.98);

                    Constructor c4 = new Constructor(5,7.8);

           

                    //在屏幕上輸出

                    c1.print();

                    c2.print();

                    c3.print();

                    c4.print();

               }

          } // TestConstructor 類結(jié)束



          對象的使用
              通過運(yùn)算符“.”可以實(shí)現(xiàn)對對象中成員變量的訪問和成員方法的調(diào)用。可以通過設(shè)定成員變量和成員方法訪問權(quán)限來限制對它的訪問。
              調(diào)用對象的成員變量的一般格式為:
          <對象名>.<成員變量名>
              其中,對象名是一個已生成的對象,也可以是能生成對象的表達(dá)式。

          例如:
              s1.name = "李明";
              int num = new Student().number;
              調(diào)用對象的成員方法的一般格式為:
                  <對象名>.<成員方法名>([<參數(shù)列表>])
              其中,參數(shù)列表是可選項(xiàng)。在進(jìn)行對象的方法引用時(shí),方法中參數(shù)的個數(shù)、參數(shù)的數(shù)據(jù)類型與原方法中定義的要一致,否則編譯器會出錯。

          對象的使用示例。
          //**************  Student2.java ***************
          //對象的使用
          import java.ioo.*;
          public class Student2{
              private String name;    //姓名
              private String sex;       //性別
              private int number;      //學(xué)號

              Student2()                  //無參構(gòu)造方法
              {
                  name = "No name";
                  sex = "unknown";
                  number = 0;
              }
              
              Student2(String a, String b, int c){
                  name = a;
                  sex = b;
                  number = c;    
              }
              public void setName(String a){
                  name = a;
              }
              public void setSex(String b){
                  sex = b;
              }
              public void setNumber(int c){
                  number = c;
              }
              public String getName(){
                  return name;
              }
              public String getSex(){
                  return sex;
              }
              public int getNumber(){
                  return number;
              }
              public static void main(String args[]){
                  Student2 s1 = new Student2();
                  Student2 s2 = new Student2("李明","男",102305);
                  System.out.println("對象的使用");
                  System.out.println("-------------------------");
                  System.out.println("第一個學(xué)習(xí)的姓名:"+s1.getName());
                  System.out.println("第一個學(xué)生的性別:"+s1.getSex());
                  System.out.println("第一個學(xué)生的學(xué)號:"+s1.getNumber());
                  System.out.println("-------------------------");
                  System.out.pringln("第二個學(xué)生的姓名:"+s2.getName());
                  System.out.println("第二個學(xué)生的性別:"+s2.getSex());
                  System.out.println("第二個學(xué)生的學(xué)號:"+s2.getNumber());
              }
          } // Student2 類結(jié)束

              在定義一個類時(shí),類中的成員變量也可以是一個類,例2-9中包含2個類:Data類和Person類,Person類的成員變量birth為Data類型。

          //*************  Person.java **************
          //對象作為類的成員變量
          import java.io.*;
          public class Date
          {
              int year;
              int month;
              int day;
              Date(int year, int month, int day){
                  this.year = year;    //用關(guān)鍵字this標(biāo)識類成員變量,一面與同名參數(shù)混淆
                  this.month = month;
                  this.day = day;
              }
              void showDate(){
                  System.out.println(year+","+month+","+day);
              }
          }//Date類結(jié)束

          public class Person
          {
              private String name;
              private String sex;
              private Date birth;    //對象作為類的成員變量,默認(rèn)初始值為null
              void setValue(String s1, String s2, int y, int m, int d){
                  name = s1;
                  sex = s2;
                  birth = new Date(y,m,d);
              }
              void showValue(){
                  System.out.println("姓名:"+name);
                  System.out.println("性別:"+sex);
                  System.out.print("出生年月日:");
                  birth.showDate();
              }
              public static void main(String args[]){
                  Person per = new Person();
                  per.setValue("李明","男",1975,7,8);
                  per.showValue();
              }
          }//Person 類結(jié)束

          finalize() 是銷毀一個對象用的



          成員變量

              成員變量是類和對象的數(shù)據(jù)屬性,其本身也有一些修飾符:訪問控制符 public private protected 以及非訪問控制符  static final transient volatile.這里主要探討常用的static 和final這兩個非訪問控制符。

          靜態(tài)變量
              使用關(guān)鍵字static 生命的成員變量稱為靜態(tài)變量。靜態(tài)變量也稱類變量(class variable),它與類關(guān)聯(lián),由類鐘的所有對象共享。無論生成多少個這種類的對象,靜態(tài)變量都只有一份,并且即使沒有生成任何對象,這種變量也存在。靜態(tài)變量之所以稱為類變量,是因?yàn)檫@種變量是屬于相應(yīng)類的,而不是屬于特定對象的,他們在該類的全部對象中共享。靜態(tài)變量可以由任何該類的對象和類引用,當(dāng)某個對象修改了靜態(tài)變量的值后,其他對象在訪問靜態(tài)變量時(shí),取得的將是改變后的新值。
              相對地,沒有用static修飾的普通成員變量稱為實(shí)例變量(instance variable)。在類中,實(shí)例變量與每個對象都唯一關(guān)聯(lián),每個類的對象將擁有自己的一份實(shí)例變量的復(fù)制,并且賦予他自己的值。實(shí)例變量使一個對象與其他對象相互區(qū)別,使對象具有自己的個性。
              下面定義一個學(xué)生 Student 類,其中包含2個靜態(tài)變量和3個實(shí)例變量。

          public class Student
          {
              static String school = "黑龍江科技學(xué)院";
              static String classNumber;

              //實(shí)例變量
              String name;
              string sex;
              int number;
              
              Student(){
                  name = "No name";
                  sex = "unknown";
                  number = 0;
              }
              Strdent (String a,String b, int c)    //構(gòu)造方法
              {
                  name = a;
                  sex = b;
                  number = c;
              }
          }//Student類結(jié)束


          最終變量
              使用關(guān)鍵字final聲明的成員變量稱為最終變量,更確切地說是常量。只不過為他們?nèi)×艘粋€類似變量的標(biāo)識符名字。用final修飾符聲明常量時(shí),需要說明常量的數(shù)據(jù)類型并要初始化具體的數(shù)值。另外,因?yàn)樗蓄悓ο蟮某A繑?shù)據(jù)成員數(shù)值都一樣,為了節(jié)省內(nèi)存控件,常量通常聲明為static。 例如下面球體類中的常量PI:

          public class Sphere
          {
              //常量
              static final double PI = 3.14;
              //變量
              double xCenter;
              double yCenter;
              double zCenter;
              double radius;
          }// Sphere 類結(jié)束


          成員方法
              成員方法是類的行為,標(biāo)志著類所具有的功能,是對類中成員變量的操作。JAVA中方法的一般格式如下:
          [方法修飾符] [返回值類型] <方法名> ([<形式參數(shù)列表>]) [throws <異常列表>]
          {
              <方法體>
          }
              成員方法是具有相對獨(dú)立性的功能模塊,是一個類與外界進(jìn)行通信的接口。成員方法也有一些修飾符:訪問修飾符public private procected 和非訪問控制符 static abstract final native synchronized 下面分別探討這幾個非訪問控制符

          靜態(tài)方法
              使用那個關(guān)鍵字static聲明的成員方法稱為靜態(tài)方法。靜態(tài)方法也稱為類方法(class method),它與類關(guān)聯(lián),是屬于整個類的,即使類中一個對象也不存在,也可以執(zhí)行該類的類方法。正式因?yàn)樵跊]有對象存在的情況下也可以執(zhí)行類方法,因此它只能調(diào)用類變量,即靜態(tài)方法只能處理靜態(tài)變量,而不能處理類中的實(shí)例變量。很明顯,實(shí)例變量是屬于某個特定對象的,如果對象不存在,實(shí)例變量也就不存在,這時(shí)用類方法去操縱和處理一個可能不存在的變量肯定會出問題。實(shí)際上,JAVA編譯器根本就不允許做這樣的嘗試。如果在一個類方法中引用了一個實(shí)例變量,系統(tǒng)將拒絕編譯,從而出現(xiàn)出錯信息。
              相對地,未用static 修飾的普通成員方法稱為實(shí)例方法(instance method)。實(shí)例方法只能針對特定的對象執(zhí)行,因此如果任何對象都不存在,也就沒有可以執(zhí)行的實(shí)例方法。

          靜態(tài)方法實(shí)例:
          //************** StaticFunction.java ***************
          //靜態(tài)方法
          import java.io.*;    //加載系統(tǒng)輸入輸出類
          public class StaticFunction
          {
              static int classVariable;      //靜態(tài)變量,即類變量
              int instanceVariable;            //非靜態(tài)變量,即實(shí)例變量

              // setClassVariable()方法為靜態(tài)方法,即類方法
              static void setClassVariable(int i){
                  //this.classvar = i; 不能使用this
                  classvariable = i;
                  //instanceVar=i; 不能訪問實(shí)例變量
              }
              void setInstanceVar(int i){
                  instanceVariable = i;
                  classvariable = i;
              }
              //MAIN方法也為靜態(tài)方法
              public static void main(String a[]){
                  StaticFunction sf = new StaticFunction();
                  /*
                      下面的語句不合法,main()方法是類方法,不能在類方法中直接調(diào)用實(shí)例方法
                      setInseranceVariable(58);
                  */
                  sf.setInstanceVariable(58);//在類方法中只能通過實(shí)例對象訪問實(shí)例方法
                  sf.setInstanceVariable(58);
                  setInstanceVariable(58);
                  StaticFunction.setClassVariable(55);
                  System.out.println("靜態(tài)方法中不能直接調(diào)用實(shí)例方法,只能通過對象訪問實(shí)例方法");
              }
          }

          抽象方法
              使用關(guān)鍵字abstract聲明的成員方法稱為抽象方法。抽象方法只有方法頭,沒有方法體。抽象方法的聲明以一個分號結(jié)束。

          抽象方法示例。
          //***************  AbstractFunction.java**************
          //抽象方法
          import java.io.*;
          abstract class Mankind
          {
              protected String type;                    //保護(hù)數(shù)據(jù)成員用于繼承
              public abstract void closing();        //抽象方法
              public abstract void food();                    //抽象方法
              public abstract void shelter();                //抽象方法
              public abstract void transportation();    //抽象方法
              
              public String toString(){
                  return "這是一個"+type;
              }
          }//Mankind類結(jié)束

          abstract class people extends Mankind
          {
              //重寫Mankind類的抽象方法colsing()
              public void closing(){
                  System.out.println("學(xué)會穿衣了!");
              }

              //重寫Mankind類的抽象方法food()
              public void food(){
                  System.out.println("學(xué)會吃飯了");
              }
          }//People 類結(jié)束

          class Person extends People{
              //重寫People類的抽象方法shelter()
              public void shelter(){
                  System.out.println("蓋房子用來居住");
              }

              //重寫people類的抽象方法transportation()
              public void transportation(){
                  System.out.println("使用交通工具出行");
              }

              //構(gòu)造方法
              public Person(String aType){
                  type = new String(aType);
              }
          }// Person類結(jié)束

          public class AbstractFunction{
              //AbstractFunction類的主方法
              public static void main(String args[]){
                  System.out.println("不能創(chuàng)建抽象類Mankind和People的對象!");
                  System.out.println("");

                  Person man = new Person("男人");
                  Person woman = new Person("女人");
                  System.out.println(man);

                  man.closing();
                  man.food();
                  man.shelter();
                  man.transportation();
                  System.out.println("  ");

                  System.out.println(woman);
                  woman.closing();
                  woman.food();
                  women.transportation();
              }
          }//AbstractFunction 類結(jié)束


          最終方法
              使用關(guān)鍵字final聲明的成員方法稱為最終方法。最終方法的功能和內(nèi)部語句不能在被更改,也就是說該方法不能貝當(dāng)前類的子類重新定義。最終方法使得子類不能重新定義與父類同名的方法,而只能使用從負(fù)累繼承來的方法,從而防止了子類對父類一些方法的錯誤定義,保證了程序的安全性和正確性。


          本地方法
              。。。。。。。。。。。。。。

          posted @ 2008-08-01 20:49 程序手記 閱讀(2101) | 評論 (4)編輯 收藏

          JAVA基礎(chǔ)(JAVA 執(zhí)行環(huán)境) 第一天

          JAVA程序有3中執(zhí)行環(huán)境。

          (1)能夠單獨(dú)運(yùn)行的程序,稱為Java Application(Java應(yīng)用程序)。

          (2)在Internet瀏覽器中運(yùn)行的程序,稱為 Java Applet(JAVA小用用程序)。Applet是一個在WEB瀏覽器內(nèi)部運(yùn)行的小應(yīng)用程序,需要WEB瀏覽器的支持。

          (3)在WEB服務(wù)器端運(yùn)行的程序,稱為Java Servlet。Servlet實(shí)際上是運(yùn)行在WEB服務(wù)器上的應(yīng)用程序,它與協(xié)議和平臺無關(guān)。Java Servlet可以動態(tài)地?cái)U(kuò)張WEB服務(wù)器的能力,并采用輕輕偶/想用模式提供WEB服務(wù)。目前SUN公司開發(fā)的JSP技術(shù),JSP是JAVA SERVER PAGE的所寫,悅來越得到廣泛的應(yīng)用。Java Servlet可以與JSP進(jìn)行交互,從而為開發(fā)WEB服務(wù)提供優(yōu)秀的解決方案。

          posted @ 2008-08-01 20:48 程序手記 閱讀(1142) | 評論 (0)編輯 收藏

          J2SE基礎(chǔ)(JAVA的常用包) 第一天

          JAVA提供了強(qiáng)大的應(yīng)用程序接口,既JAVA類庫。他包含大量已經(jīng)設(shè)計(jì)好的工具類,幫助程序員進(jìn)行字符串處理、繪圖、數(shù)學(xué)計(jì)算和網(wǎng)絡(luò)應(yīng)用等方面的工作。下面簡單介紹JAVA核心類庫中常用的組建包。

          1.java.lang包

              在所有的JAVA API類庫中,JAVA.LANG包是最重要的,它提供了JAVA語言的核心類庫,包含了運(yùn)行JAVA程序必不可少的系統(tǒng)類,如:基本數(shù)據(jù)類型、基本數(shù)學(xué)函數(shù)、字符串處理、線程管理和異常處理類等。運(yùn)行JAVA程序時(shí),系統(tǒng)會自動加載JAVA.LANG包,既這個包的加載是默認(rèn)的。

          2.java.io包

              JAVA.IO包提供了一系列用來讀寫文件或其他的輸入輸出流。其中有基本輸入/輸出類、緩存流類、比特?cái)?shù)組玉字符串流類、數(shù)據(jù)流類、文件流類、管道類、流連接類和異常類等。

          3.java.util包

              java.util包提供了JAVA語言中的一些低級的實(shí)用工具,如數(shù)據(jù)結(jié)構(gòu)類、日期類、隨機(jī)數(shù)類、屬性類、觀測類和異常類等。

          4.java.awt包

              java.awt包是JAVA語言用來構(gòu)建圖形用戶界面(GUI)的類庫,包括許多界面元素和資源。JAVA.AWT包提供JAVA語言中的圖形類、組成類、容器類、排列類、幾何類、事件類和工具類等。

          5.java.net包

              JAVA.NET包包含一些玉網(wǎng)絡(luò)相關(guān)的類和接口,以方便應(yīng)用程序在網(wǎng)絡(luò)上傳輸信息。如主機(jī)名解析類、實(shí)現(xiàn)套接字通信的Socket類和ServerSocket類、資源定位器(URL)類等。

          6.java.applet包

              java.applet包是用來實(shí)現(xiàn)運(yùn)行于Internet瀏覽器中的JAVA APPLET的工具類庫。它包含于產(chǎn)生Applet的類和用于Applet通信的類。Applet類稱為小應(yīng)用程序類,通常所說的Applet程序必須集成該類,Applet是一種專門化的面板,需要潛入到HTML網(wǎng)頁中,由與JAVA語言兼容的瀏覽器執(zhí)行。

          7.JAVA.AWT.EVENT包

              java.awt.event包是對JDK 1.0版本中原有的Event類的一個擴(kuò)充,它使得程序可以用不同的方式來處理不同類型的事件,該包中定義了許多不同類型的事件監(jiān)聽器類,使每個圖形界面元素本身可以處理它上面的事件。

              除了上述的常用JAVA組件包外,JAVA類庫中還有很多實(shí)用的組件包,并且還在不斷地?cái)U(kuò)充,請查看相關(guān)的JAVA文檔。

          posted @ 2008-08-01 20:47 程序手記 閱讀(2131) | 評論 (5)編輯 收藏

          僅列出標(biāo)題
          共2頁: 上一頁 1 2 
          主站蜘蛛池模板: 马龙县| 贡嘎县| 石家庄市| 镶黄旗| 神池县| 太康县| 锡林郭勒盟| 渭源县| 平陆县| 福鼎市| 团风县| 昆山市| 揭阳市| 信丰县| 惠安县| 瑞安市| 太保市| 江津市| 石城县| 大庆市| 五台县| 慈利县| 岢岚县| 漳州市| 大关县| 通州区| 临安市| 嘉禾县| 安乡县| 洛扎县| 日喀则市| 长治县| 余江县| 黔江区| 永登县| 景宁| 达州市| 巴塘县| 开封市| 侯马市| 托里县|