Java基礎知識之常見關鍵字以及概念總結

static java

特色: 
隨着類的加載而加載 
優先於對象存在 
被全部對象所共享 
能夠直接被類名調用jvm

使用注意: 
靜態方法只能訪問靜態成員 
可是非靜態成員能夠直接訪問靜態成員 
靜態方法中不可用使用this,super關鍵字 
主方法(main)是靜態的(能夠利用類名去調用靜態的main方法,可是會陷入死循環,致使內存溢出,jvm自動中止) 
用static修飾的成員表示它屬於這個類共有,而不是屬於該類的單個實例 
static修飾的字段和方法,既能夠經過類調用,也可使用實例調用,沒有static修飾的字段和方法,只能使用實例來調用函數

final 
特色: 
final能夠修飾類,方法,變量 
final修飾類不能夠被繼承,可是能夠繼承其餘類 
final修飾的方法不能夠被覆寫,但能夠覆寫父類方法 
final修飾的變量成爲常量,這些變量只能賦值一次 
內部類在局部時,只能夠訪問被final修飾的局部變量 
final修飾的引用類型變量,表示該變量的引用不能變,而不是該變量的值不能變性能

this 
特色: 
this表示當前對象 
換言之:誰調用了方法,誰就是當前對象 
在構造器中使用this時,this參數必須卸載構造方法第一行this

super 
特色: 
表示父類對象的默認引用 
若是子類要調用父類被覆蓋的實例方法,可用super做爲調用者調用父類被覆蓋的實例方法spa

注意事項: 
Java在執行子類的構造方法前會先調用父類無參的構造方法,其目的是爲了對繼承自父類的成員作初始化操做 
子類在建立對象的時候,默認調用父類的無參構造方法,要是子類構造方法中顯示指定調用父類其餘構造方法,就調用指定的父類構造方法,取消調用父類無參構造方法設計

權限修飾符 
public: 公共訪問權限:任何地方均可以訪問,能繼承到子類 
protected: 子類訪問權限:本類內部能夠訪問,不一樣包的子類也能夠訪問,同包的其餘類也能夠訪問,能繼承到子類 
default: 什麼都不寫,包訪問權限:本類內部能夠訪問,同包其餘類也能夠訪問,同包可繼承 
private: 類訪問權限:本類內部能夠訪問,不能繼承到子類code

abstract 
抽象:不具體,看不明白。抽象類表象體現。對象

在不斷抽取過程當中,將共性內容中的方法聲明抽取,可是方法不同,沒有抽取,這時抽取到的方法,並不具體,須要被指定關鍵字abstract所標示,聲明爲抽象方法。繼承

抽象方法所在類必定要標示爲抽象類,也就是說該類須要被abstract關鍵字所修飾。

抽象類的特色: 
1:抽象方法只能定義在抽象類中,抽象類和抽象方法必須由abstract關鍵字修飾(能夠描述類和方法,不能夠描述變量)。 
2:抽象方法只定義方法聲明,並不定義方法實現。 
3:抽象類不能夠被建立對象(實例化)。 
4:只有經過子類繼承抽象類並覆蓋了抽象類中的全部抽象方法後,該子類才能夠實例化。不然,該子類仍是一個抽象類。

抽象類的細節: 
1:抽象類中是否有構造函數?有,用於給子類對象進行初始化。 
2:抽象類中是否能夠定義非抽象方法? 能夠。其實,抽象類和通常類沒有太大的區別,都是在描述事物,只不過抽象類在描述事物時,有些功能不具體。因此抽象類和通常類在定義上,都是須要定義屬性和行爲的。只不過,比通常類多了一個抽象函數。並且比通常類少了一個建立對象的部分。 
3:抽象關鍵字abstract和哪些不能夠共存?final , private , static 
4:抽象類中可不能夠不定義抽象方法?能夠。抽象方法目的僅僅爲了避免讓該類建立對象。

接 口:★★★★★ 
1:是用關鍵字interface定義的。 
2:接口中包含的成員,最多見的有全局常量、抽象方法。

注意:接口中的成員都有固定的修飾符。 
成員變量:public static final 
成員方法:public abstract

interface Inter{     
    public static final int x = 3;     public abstract void show(); }

3:接口中有抽象方法,說明接口不能夠實例化。接口的子類必須實現了接口中全部的抽象方法後,該子類才能夠實例化。不然,該子類仍是一個抽象類。
4:類與類之間存在着繼承關係,類與接口中間存在的是實現關係。 
繼承用extends ;實現用implements ; 
5:接口和類不同的地方,就是,接口能夠被多實現,這就是多繼承改良後的結果。java將多繼承機制經過多現實來體現。 
6:一個類在繼承另外一個類的同時,還能夠實現多個接口。因此接口的出現避免了單繼承的侷限性。還能夠將類進行功能的擴展。 
7:其實java中是有多繼承的。接口與接口之間存在着繼承關係,接口能夠多繼承接口。

接口都用於設計上,設計上的特色:(能夠理解主板上提供的接口) 
1:接口是對外提供的規則。 2:接口是功能的擴展。 3:接口的出現下降了耦合性。

抽象類與接口: 
抽象類:通常用於描述一個體系單元,將一組共性內容進行抽取,特色:能夠在類中定義抽象內容讓子類實現,能夠定義非抽象內容讓子類直接使用。它裏面定義的都是一些體系中的基本內容。 
接口:通常用於定義對象的擴展功能,是在繼承以外還需這個對象具有的一些功能。 
抽象類和接口的共性:都是不斷向上抽取的結果。

抽象類和接口的區別: 
1:抽象類只能被繼承,並且只能單繼承。 
接口須要被實現,並且能夠多實現。 
2:抽象類中能夠定義非抽象方法,子類能夠直接繼承使用。 
接口中都有抽象方法,須要子類去實現。 
4:抽象類的成員修飾符能夠自定義。 
接口中的成員修飾符是固定的。全都是public的。

多 態★★★★★(面向對象特徵之一):函數自己就具有多態性,某一種事物有不一樣的具體的體現。

體現:父類引用或者接口的引用指向了本身的子類對象。//Animal a = new Cat(); 
多態的好處:提升了程序的擴展性。 
多態的弊端:當父類引用指向子類對象時,雖然提升了擴展性,可是隻能訪問父類中具有的方法,不能夠訪問子類中特有的方法。(前期不能使用後期產生的功能,即訪問的侷限性) 
多態的前提: 1:必需要有關係,好比繼承、或者實現。 2:一般會有覆蓋操做。

若是想用子類對象的特有方法,如何判斷對象是哪一個具體的子類類型呢? 
能夠能夠經過一個關鍵字 instanceof ;//判斷對象是否實現了指定的接口或繼承了指定的類 
格式:<對象 instanceof 類型> ,判斷一個對象是否所屬於指定的類型。 Student instanceof Person = true;//student繼承了person類

多態在子父類中的成員上的體現的特色: 
1,成員變量:在多態中,子父類成員變量同名。 
在編譯時期:參考的是引用型變量所屬的類中是否有調用的成員。(編譯時不產生對象,只檢查語法錯誤) 
運行時期:也是參考引用型變量所屬的類中是否有調用的成員。 
簡單一句話:不管編譯和運行,成員變量參考的都是引用變量所屬的類中的成員變量。 再說的更容易記憶一些:成員變量 — 編譯運行都看 = 左邊。

2,成員函數。 
編譯時期:參考引用型變量所屬的類中是否有調用的方法。 
運行事情:參考的是對象所屬的類中是否有調用的方法。 
爲何是這樣的呢?由於在子父類中,對於如出一轍的成員函數,有一個特性:覆蓋。 
簡單一句:成員函數,編譯看引用型變量所屬的類,運行看對象所屬的類。 更簡單:成員函數 — 編譯看 = 左邊,運行看 = 右邊。

3,靜態函數。 
編譯時期:參考的是引用型變量所屬的類中是否有調用的成員。 
運行時期:也是參考引用型變量所屬的類中是否有調用的成員。 
爲何是這樣的呢?由於靜態方法,其實不所屬於對象,而是所屬於該方法所在的類。 調用靜態的方法引用是哪一個類的引用調用的就是哪一個類中的靜態方法。 
簡單說:靜態函數 — 編譯運行都看 = 左邊。

Object:全部類的直接或者間接父類,該類中定義的就是全部對象都具有的功能。

具體方法: 
1.boolean equals(Object obj):用於比較兩個對象是否相等,其實內部比較的就是兩個對象地址。 
而根據對象的屬性不一樣,判斷對象是否相同的具體內容也不同。因此在定義類時,通常都會複寫equals方法,創建本類特有的判斷對象是否相同的依據。

public boolean equals(Object obj){    if(!(obj instanceof Person))        return false;    Person p = (Person)obj;    return this.age == p.age; }

2,String toString():將對象變成字符串; 
默認返回的格式:類名@哈希值 = getClass().getName() + ‘@’ + Integer.toHexString(hashCode()) 
爲了對象對應的字符串內容有意義,能夠經過複寫,創建該類對象本身特有的字符串表現形式。

public String toString(){    return "person : "+age; }

3,Class getClass():獲取任意對象運行時的所屬字節碼文件對象。

4,int hashCode():返回該對象的哈希碼值。支持此方法是爲了提升哈希表的性能。

內部類:若是A類須要直接訪問B類中的成員,而B類又須要創建A類的對象。這時,爲了方便設計和訪問,直接將A類定義在B類中。就能夠了。 
A類就稱爲內部類。內部類能夠直接訪問外部類中的成員。而外部類想要訪問內部類,必需要創建內部類的對象。

class Outer{ 
    int num = 4;    class Inner {        void show(){            System.out.println("inner show run "+num);        }    }    public void method(){        Inner in = new Inner();//建立內部類的對象。        in.show();//調用內部類的方法。    } }

當內部類定義在外部類中的成員位置上,可使用一些成員修飾符修飾 private、static。 
1:默認修飾符。 直接訪問內部類格式:外部類名.內部類名 變量名 = 外部類對象.內部類對象; Outer.Inner in = new Outer.new Inner();//這種形式不多用。 可是這種應用很少見,由於內部類之因此定義在內部就是爲了封裝。想要獲取內部類對象一般都經過外部類的方法來獲取。這樣能夠對內部類對象進行控制。 
2:私有修飾符。 一般內部類被封裝,都會被私有化,由於封裝性不讓其餘程序直接訪問。 
3:靜態修飾符。 若是內部類被靜態修飾,至關於外部類,會出現訪問侷限性,只能訪問外部類中的靜態成員。 注意;若是內部類中定義了靜態成員,那麼該內部類必須是靜態的。

匿名內部類:沒有名字的內部類。就是內部類的簡化形式。通常只用一次就能夠用這種形式。匿名內部類其實就是一個匿名子類對象。想要定義匿名內部類:須要前提,內部類必須繼承一個類或者實現接口。

匿名內部類的格式:new 父類名&接口名(){ 定義子類成員或者覆蓋父類方法 }.方法。

相關文章
相關標籤/搜索