java基礎知識總結(二)

Java中的代碼塊

  java中的代碼塊是用{}括起來的代碼,進行一些功能的限定

  • 靜態代碼塊:在類第一次被初始化的是後執行,負責一些類的初始化操作,僅僅只執行一次
  • 構造代碼塊:顧名思義,輔助構造器進行初始化操作,每次構造器執行前先執行構造代碼塊
  • 局部代碼塊:在方法內部的代碼塊,主要用來限制變量的生命週期
  • 同步代碼塊:局部代碼塊的一種,在方法內部進行同步控制

和類初始化相關的構造方法執行順序:靜態代碼塊 > 構造代碼塊 > 構造方法

public class FanXing {
    //靜態代碼塊
    static {
        System.out.println("靜態代碼塊一執行了!");
    }
    static {
        System.out.println("靜態代碼塊二執行了!");
    }
    //構造方法
    public FanXing() {
        System.out.println("構造方法執行了!");
    }
    //構造代碼塊
    {
        System.out.println("構造代碼塊一執行了!");
    }
    {
        System.out.println("構造代碼塊二執行了!");    
    }
    public static void main(String[] args) {
        FanXing f = new FanXing();
        //局部代碼塊    
        {
            System.out.println("局部代碼塊執行了");
        }
    }
}

執行結果爲:

靜態代碼塊一執行了!
靜態代碼塊二執行了!
構造代碼塊一執行了!
構造代碼塊二執行了!
構造方法執行了!
局部代碼塊執行了

繼承

  我們一定要知道一般情況下繼承是爲了方法的重寫,而不是爲了功能的擴展,功能的擴展用接口實現,java中只有單繼承和多重繼承,沒有多繼承(接口有多繼承,這也在一定程度上彌補了接口單一原則的弊端,繼承提高了代碼的複用性和維護性,讓類與類產生了一個關係,是多態的前提。

  但是任何事物都有兩面性,繼承也有不好的一面的,我們寫程序都追求低耦合好內聚,意思就是儘量讓一個類獨立完成自己的功能,不和其他類產生聯繫,這樣不利用代碼的擴展。甚至繼承在一定程度上打破了封裝性。

繼承的注意事項:

  • 子類不能繼承父類的私有成員,不能繼承並不是沒有該屬性,只是不能直接調用,而我們通常的做法是,父類提供getXxx()和setXxx()方法或者子類通過super去調用父類的構造方法進行該私有成員的初始化。
  • 子類不能繼承父類的構造方法,但是可以通過super去訪問

多態

  同一個對象在不同時刻體現出來的不同狀態。多態是在寫代碼時期由於無法確定該引用類型,用一種對象引用來表現多種對象,我們常見的傳參是抽象類或者接口類型的其實都是多態,多態的前提:有繼承或者實現關係,有方法重寫,有向上轉型。在多態中主要的是方法的重寫,因爲只有不同的“態”具有不同的方法內容,多態纔有實際的意義。

  同樣的多態也有弊端,對於向上轉型,該對象不能調用子類特有的方法,調用前需要將此對象強轉子類對象,也就是向下轉型。

多態中的成員訪問特點

  • 成員變量:編譯看左邊,運行看左邊
  • 構造方法:子類的構造都會默認訪問父類構造
  • 成員方法:編譯看左邊,運行看右邊
  • 靜態方法:編譯看左邊,運行看左邊

多態中,例如:Person  s =  new Stiudent()無論什麼屬性在編譯時都是先檢驗Person類中是否存在,而在運行時只有成員方法會調用Student類中的方法,其他的都是調用Person中的,所以說多態是基於方法重寫的!

抽象類

  我們在繼承的時候就知道了,有些方法在父類和子類中會有不同的實現,那麼如果這個方法在父類中並不會有具體的實現,就彷彿多態在真正初始化之前是不知道什麼類型的,所以這個方法在不被真正重寫之前是不知道具體內容的,那麼這個方法我們就可以用abstract修飾,來聲明該方法此時沒有具體的實現內容,需要子類不得不重寫,這就是抽象方法,而一個類有了抽象方法,這個類就必須用abstract修飾來標註它是一個抽象類,

  abstract:作爲一個修飾符,是抽象的標識,那麼抽象往往 意味着和很多關鍵字衝突,比如說private static final,仔細想想那幾個關鍵字的含義你便明白爲什麼了,其實abstract只能和倆個修飾符共存:protected和public,因爲java中是這樣說的:The abstract method fun in type FanXing can only set a visibility modifier, one of public or protected.

抽象類的特點

  • 抽象類和抽象方法必須用關鍵字abstract修飾
  • 抽象類中不一定有抽象方法,但是有抽象方法的類一定是抽象類
  • 抽象類不能實例化,即不能創建對象

接口

  如果我們說抽象類是共性的提取,那麼接口就是特性的擴展,接口是用來給類擴展功能的,實現一個接口就 意味着擴展該接口中的方法

接口的特點

  • 接口用關鍵字interface修飾
  • 接口中的方法一定是抽象方法,也就是用public abstract修飾
  • 接口中的成員變量一定是靜態的常量,也就是用public static final修飾
  •  接口不能實例,接口中沒有構造方法,這裏區別於抽象類中,因爲抽象類是類,其子類對象是需要調用父類的構造器
  • 接口和接口之間可以多繼承,即一個接口同時繼承多個接口。



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