java編程思想(隨筆)

       一直都有聽說這本書,朋友也都建議去認真看一看,可每次看到那麼厚的一本書,就又隨手丟到了一邊。一轉眼就來到了2018年,兜兜轉轉又撿起了這本書,想要突破現狀,唯有一睹。。。

       初讀此書,或有所獲。趁着這段假期,計劃好好的閱讀一下,順便在此留下自己的一些感悟和總結,記錄是一個好的習慣,它會記錄我們的生活,成爲人生的一個印記!對於書中的內容我不會總結的很詳細,只是對一些自己之前不是很熟悉或者很重要的內容做一下總結。


初讀,略有所獲

java.lang 是一個特定類,它會自動被導入到每一個java文件中。

equals()方法:如果在自己編寫的類中,使用equals()方法對類進行比較時,需要使這個類覆蓋equals()方法;

                             否則,equals()方法默認比較的是對象的引用。

java解釋器運行過程:

  1. 找出環境變量CLASSPAT
  2. CLASSPAT用作查找.class文件的根目錄
  3. 解釋器獲取包的名稱並將每個句點替換成反斜槓,以從CLASSPAT根中產生一個路徑名稱(例如:package   foo.bar.baz變成foo\bar\baz或foo/bar/baz或其他,這一切取決於操作系統)
  4. 得到的路徑會與CLASSPAT中各個不同的項進行連接,解釋器就在這些目錄中查找與你所要創建的類名稱相關的.class文件

訪問權限控制:

訪問控制符 同一個類 同一個包 不同包中的子類 不同包中的非子類
public(公共的) true true true true
protected(受保護的) true true true \
無訪問控制符(默認的) true true \ \
private(私有的) true \ \ \

多態

       作用:消除類型之間的耦合關係

       java中的所有方法都是通過動態綁定實現多態的,static方法和final方法(private方法屬於final方法)除外,只有普通方法的調用纔可以是多態的。構造器並不具有多態性(它們實際上是static方法,只不過該static聲明是隱式的)。

class  StaticSuper{
    public static String staticGet(){
        return "Base staticGet()";
    }
    public String dynamicGet(){
        return "Base dynamicGet()";
    }
}

class  StaticSub extends StaticSuper{
    public static String staticGet(){
        return "Derived staticGet()";
    }
    public String dynamicGet(){
        return "Derived dynamicGet()";
    }
}

public class StaticPolymorphism{
    public static void mian(String[] args){
        StaticSuper sup = new StaticSub();
        System.out.println(sup.staticGet());
        System.out.println(sup.dynamicGet());

    }
}

答案:
    Base staticGet()
    Derived dynamicGet()

複雜對象調用構造器的順序

  1. 調用基類構造器。這個步驟會不斷地反覆遞歸下去,首先是構造這種層次的根,然後是下一層導出類,等等,直到最底層的導出類;
  2. 按聲明順序調用成員的初始化方法;
  3. 調用導出類構造器的主體。
class Meal{
    Meal(){
        print("Meal()");
    }
}

class Bread{
    Bread(){
        print("Bread()");
    }
}

class Cheese{
    Cheese(){
        print("Cheese()");
    }
}

class Lettuce{
    Lettuce(){
        print("Lettuce()");
    }
}

class Lunch extends Meal{
    Lunch(){
        print("Lunch()");
    }
}

class PortableLunch extends Lunch{
    PortableLunch(){
        print("PortableLunch()");
    }
}

public class Sandwich extends PortableLunch{
    priate Bread b = new Bread();
    priate Cheese b = new Cheese();
    priate Lettuce b = new Lettuce();
    public Sandwich(){
        print("Sandwich()");
    }
    public static void main(String[] args){
        new Sandwich();
    }
}

答案:
    Meal()
    Lunch()
    PortableLunch()
    Bread()
    Cheese()
    Lettuce()
    Sandwich()

享元設計模式

  1. 核心概念:若一個系統裏要多次調用一個創建複雜的對象,那麼就共享一個拷貝的對象,而不必每次都去創建一個新對象。這樣既節省了內存,又減小了JVM的壓力。
  2. 目的:能夠提高系統的性能。
  3. 角色:抽象享元—主要用於定義共享對象的業務需求;具體享元—具體的實現;享元工廠—用於創建具體的享元,維護相同的享元對象,維護一個列表。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章