1. 程式人生 > >java基礎篇之最基礎

java基礎篇之最基礎

靜態程式碼塊執行一次,隨著類載入而載入

public class Test {

    static HashMap hashMap = new HashMap(){ // map優雅的寫法
        {
            put("1","2");
        }
    };

    public Test() {
        System.out.println("構造器");
    }

    {
        put("a","2");
        put("b","2");
        put("c","2");
        System.out.
println(this); } static{ System.out.println("靜態程式碼塊"); } { System.out.println("例項初始化塊"); } public static void main(String[] args) { new Test(); System.out.println("***********"); new Test(); System.out.println(hashMap); }
}

輸出:

靜態程式碼塊
例項初始化塊
構造器
\***********
例項初始化塊
構造器

抽象類

  • 必須繼承父類的抽象方法,除非是抽象類
  • 抽象類不一定都有抽象方法
  • 抽象方法必須為public或者protected(因為如果為private,則不能被子類繼承,子類便無法實現該方法),預設情況下預設為public

介面

  • 介面中的變數會被隱式地指定為public static final變數
  • 介面中的方法全都是public abstract
區別

1)抽象類可以提供成員方法的實現細節,而介面中只能存在public abstract 方法;
2)抽象類中的成員變數可以是各種型別的,而介面中的成員變數只能是public static final型別的;
3)介面中不能含有靜態程式碼塊以及靜態方法,而抽象類可以有靜態程式碼塊和靜態方法;
4)一個類只能繼承一個抽象類,而一個類卻可以實現多個介面。
  
設計理念

  • 飛機和鳥是不同類的事物,但是它們都有一個共性,就是都會飛。那麼在設計的時候,可以將飛機設計為一個類Airplane,將鳥設計為一個類Bird,但是不能將 飛行 這個特性也設計為類,因此它只是一個行為特性,並不是對一類事物的抽象描述。
  • 此時可以將 飛行 設計為一個介面Fly,包含方法fly( ),然後Airplane和Bird分別根據自己的需要實現Fly這個介面。
  • 然後至於有不同種類的飛機,比如波音、空客等直接繼承Airplane即可,對於鳥也是類似的,不同種類的鳥直接繼承Bird類即可。
  • 從這裡可以看出,繼承是一個 "是不是"的關係,而 介面 實現則是 "有沒有"的關係。
  • 對於抽象類,如果需要新增新的方法,可以直接在抽象類中新增具體的實現,子類可以不進行變更
  • 對於介面則不行,如果介面進行了變更,則所有實現這個介面的類都必須進行相應的改動
//old :每個impl實現三個介面,
//new :定義一個抽象類來實現三個介面,所有商家的實現類繼承該抽象類,
//報警是行為,不一定都有
interface Alram {
    void alarm();
}

//所有的門都可以開和關 
abstract class Door {
    void open();
    void close();
}
 
class AlarmDoor extends Door implements Alarm {
    void oepn() {
      //....
    }
    void close() {
      //....
    }
    void alarm() {
      //....
    }
}

匿名內部類

……