Java基礎知識點總結四

1.      程序只有一個主類,即爲帶有public修飾的那個類,同時與類文件的名字一樣,別的類再定義時不能用public修飾。

2.      類可選修飾符爲public,abstract,final;成員方法可選修飾符爲 public,protected,

private.方法返回值類型:必選,無返回值用void,可以是任何Java數據類型。

3.聲明成員變量:[修飾符][static][final][transient][volatile]<變量類型><變量名>

   修飾符:可選,可用public,protected,private.

   static:可選,指定成員變量爲靜態變量,可直接用類名訪問。

   final:可選,指定成員變量爲取值不會改變的常量。

transient:可選,指定成員變量爲暫時變量,用於對象存盤。

volatile:可選,指定成員變量爲共享變量,用於併發線程的共享。

4.局部變量的修飾符不能用public,protected,private,static,但可用final修飾。

5.當局部變量和成員變量名字相同時,成員變量被隱藏,若想使用成員變量,必須用this,格式爲:this.成員變量名;    this.成員方法名();

6.銷燬對象:垃圾回收機制可自動判斷無用對象並銷燬。finalize()方法,用於在對象被垃圾回收機制銷燬之前,由垃圾回收機制擅用。也可用析構方法finalize(),它無參無返回值,每個類有且只有一個析構方法。

7.子類聲明一個與父類的成員變量同名的成員變量,則子類不能繼承父類的成員變量,此時稱子類的成員變量隱藏了父類的成員變量;子類聲明一個與父類的成員方法同名的成員方法,則子類不能繼承父類的成員方法,此時稱子類的成員方法覆蓋了父類的成員方法。

8.子類調用父類的構造方法:默認構造方法用super();帶參構造方法用super(參數);在子類中調用父類中被隱藏的成員變量和成員方法:super.成員變量名;super.成員方法名().

9.通常通過方法的重載(在一個類中,方法名相同,但參數個數或參數類型不同)和覆蓋來實現類的多態性。

10.覆蓋時注意:子類不能覆蓋父類中聲明爲final或者static的方法;子類必須覆蓋父類中聲明爲abstract的方法,或者子類也應該聲明爲abstract;子類覆蓋父類中的同名方法時,子類的方法聲明也必須和父類中被覆蓋的方法的聲明一樣。

11.覆蓋:一個方法將方法的超類實現替換爲自己的實現,其簽名必須和超類方法簽名相同,但返回類型可以按照某種特定的方式變化。

   1)如果返回類型是引用類型,則覆蓋方法的返回類型可以聲明爲超類方法聲明的返回類型的子類型;如果返回類型是基本類型,則覆蓋方法的返回類型必須和超類方法的返回類型相同。

   2)覆蓋方法有自己的訪問修飾符,但只限於提供更多的訪問權限。覆蓋方法還可以改變其他方法修飾符,可以隨意的改變synchronized、native和strictfp修飾符。不管覆蓋方法中的參數是否是final的,子類都可以修改這個參數(參數的final修飾符不屬於方法的簽名,只是實現的細節)。

   3)覆蓋方法的throws子句可以和超類方法有所不同,它列出的每一個異常類型都應該和超類中的異常類型相同,或者是超類異常類型的字類型。

12.隱藏字段 :字段不可以被覆蓋而只能被隱藏。  

可訪問性與覆蓋 :一個方法只有當它可以被訪問時纔可以被覆蓋(final方法等)。  

隱藏靜態成員 :類中的靜態成員(無論是字段還是方法)不可以被覆蓋,只能被隱藏。

13.abstract class(抽象類),只聲明方法的存在而不去具體實現它的類。抽象類不能被實例化,也不能創建其對象。

14.public abstract void get();(抽象方法),不能使用private或static關鍵字修飾。

15.包含一個或多個抽象方法的類必須被聲明爲抽象類。

16.Final類,不能被繼承,即不能有子類。爲程序的安全,可將一些重要的類聲明爲final類。System類和String類被聲明爲final類。

17.[修飾符]interface 接口名[extends 父接口列表] {

          [public][static][final] 常量;

          [public][abstract]方法;

}//定義接口

修飾符:可選,public或默認。

方法:接口中的方法只有定義面沒有被實現。

與類文件一樣,接口文件的文件名必須與接口名相同。

18.在類中實現接口時,方法的名字、返回值類型、參數的個數及類型必須與接口中的完全一致,並且必須實現接口中的所有方法。

19. 實例內部類:

   1)在創建實例內部類的實例時,外部類的實例必須已經存在。

   ExteriorTest.InsideTest ei=new ExteriorTest().new InsideTest();

   2) 實例內部類的實例自動持有外部類的實例的引用。在內部類中,可以直接訪問外部類的所有成員。在多重嵌套中,內部類可以訪問所有外部類的成員。

   3)外部類實例與內部類實例之間是一對多的關係,一個內部類實例只會引用一個外部類實例,而一個外部類實例對應零個或多個內部類實例。在外部類中不能直接訪問內部類的成員,必須通過內部類的實例去訪問。

   4)在實例內部類中不能定義靜態成員,而只能定義實例成員。

   5)如果實例內部類B與外部類A包含同名的成員(比如成員變量v),那麼在類B中,this.v表示類B的成員,A .this.v表示類A的成員。

20.靜態內部類:

    1)靜態內部類的實例不會自動持有外部類的特定實例的引用,在創建內部類的實例時,不必創建外部類的實例。

      ExteriorTest.InsideTest ei=new ExteriorTest.InsideTest();

     2)靜態內部類可以直接訪問外部類的靜態成員,如果訪問外部類的實例成員,就必須通過外部類的實例去訪問。

     3)在靜態內部類中可以定義靜態成員和實例成員。

     4)客戶類可以通過完整的類名直接訪問靜態內部類的靜態成員。

21.局部內部類:(修飾符限制與局部變量類似)

    1)局部內部類只能在當前方法中使用。

    2)局部內部類和實例內部類一樣,不能包含靜態成員。

    3)在局部內部類中定義的內部類修飾符限制與局部變量類似。

    4)局部內部類和實例內部類一樣,可以訪問外部類的所有成員,此外,局部內部類還可以訪問所在方法中的final類型的參數和變量。

22.內部類的繼承:

     1)外部類Sample繼承了另一個外部類Outer的內部類Inner,每個Sample實例必須自動引用一個Outer實例,當調用一個Sample實例的print()方法時,print()方法會訪問當前Outer實例的成員變量。

       Sample的構造方法:

public Sample(Outer o){

       o.super();

    }

     2)內部類並不存在覆蓋的概念,假如子類與父類中存在同名的內部類,那麼這兩個內部類也會分別在不同的命名空間中,因此不會發生衝突。

23.匿名內部類:

1)匿名內部類本身沒有構造方法,但是會調用父類的構造方法。

2)匿名類儘管沒有構造方法,但是可以在匿名類中提供一段實例初始化代碼,Java虛擬機會在調用了父類的構造方法後,執行這段代碼。

3)除了可以在外部類的方法內定義匿名類以外,還可以在聲明一個成員變量時定義匿名類。

4)匿名類除了可以繼承類以外,還可以實現接口。

5)匿名類和局部內部類一樣,可以訪問外部類的所有成員,如果匿名類位於一個方法中,還能訪問所在方法的final類型的變量和參數。

6)局部內部類的名字在方法外是不可見的,因此與匿名類一樣,能夠起到封裝類型名字的作用。

   局部內部類與匿名類的區別:

   1))匿名類的程序代碼比較簡短。

   2))一個局部內部類可以有多個重載構造方法,並且客戶類可以多次創建局部內部類的實例。而匿名類沒有重載構造方法,並且只能創建一次實例。因此,如果只需要創建內部類的一個實例,那麼可以用匿名類,它能使程序代碼比較簡捷,如果需要多次創建內部類的實例,那麼用局部內部類。

24

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章