1. 程式人生 > 其它 >Java基礎知識整理

Java基礎知識整理

  1. 類與物件
    類是一個模板:抽象,物件是一個具體的例項

    類是一個抽象的概念 狗

    物件是一個具體的狗 小明家的旺財

  2. 方法
    定義、呼叫

  3. 對應的引用

    • 引用的型別: 基本型別
    • 物件是通過引用來操作的:棧---->堆
  4. 屬性:欄位Field 成員變數

    預設初始化

    • 數字
    • char
    • boolean
    • 引用

    修飾符 屬性型別 屬性名 = 屬性值

  5. 物件的建立和使用

    • 必須使用new 關鍵字創造物件,構造器
    • 物件的屬性
    • 物件的方法
  6. 類:

    • 靜態的屬性 屬性
    • 動態的行為 方法

封裝、繼承、多型

封裝

  • 該露的露
    • 程式設計追求“高內聚,低耦合”。高內聚就是類內部資料操作細節自己完成,不允許外部干涉;低耦合:盡暴露少量的方法給外部使用。
  • 封裝(資料的隱藏)
    • 通常,應禁止直接訪問一個物件中資料的實際表示,而應通過操作介面來訪問,這成為資訊隱藏。

屬性私有:set/get

繼承

  • 繼承的本質是對某一批類的抽象,
  • super
    1. super呼叫父類的構造方法,必須在構造方法的第一個
    2. super必須只能出現在子類的方法或者是構造方法
    3. super和this不能同時呼叫方法
對比 代表的物件不同 前提 構造方法
this 本身呼叫這個物件 沒用繼承也可以使用 本類的構造
super 代表父類物件的應用 只能在繼承條件下才可以使用 父類的構造

方法重寫

重寫都是方法的重寫的,和屬性無關

需要有繼承關係,子類重寫父類的方法!

  1. ​ 方法名必須相同
  2. 引數列表必須相同
  3. 修飾符:範圍可以擴大
  4. 丟擲的異常:範圍,可以被縮小,但不能擴大

重寫,子類的方法必須跟父類必要一致:方法體不同

為什麼需要重寫:

  1. 父類的功能,子類不一定需要,或者不一定滿足!

    Alt+Insert :override

多型

  1. 多型是方法的多型,屬性沒有多型

  2. 父類和子類,有聯絡 型別轉換異常! ClassCastException !

  3. 存在條件:繼承關係,方法需要重寫,父類引用指向子類物件!Father f1 = new Son();

    無法被重寫的

    1. static 方法,屬於類,它不屬於例項
    2. final 常量
    3. private 方法

型別轉化

  1. 父類引用指向子類的物件
  2. 把子類轉換為父類,向上轉型
  3. 把父類轉換為子類,向下轉型:強制轉換
  4. 方便方法的呼叫,減少重複的程式碼

抽象類

  1. 不能new這個抽象類,只能靠子類去實現它:約束
  2. 抽象類中可以寫普通方法
  3. 抽象方法必須在抽象類中

抽象類不可以單繼承,只能用介面

介面

作用

  • 約束
  • 定義一些方法,讓不同的人實現
  • public abstract
  • public static final
  • 介面不能被例項化,介面中沒有構造方法
  • implements可以實現多個介面
  • 必須重寫介面中的方法

implements 類可以實現介面 implements 介面
實現了介面中的類,就需要重寫介面中的方法
利用介面實現多繼承

異常處理機制

try

catch

finally

工廠模式

簡易工廠模式

該模式對物件建立管理方式最為簡單,因為其僅僅簡單的對不同類物件的建立進行了一層薄薄的封裝。該模式通過向工廠傳遞型別來指定要建立的物件,其UML類圖如下:

下面我們使用手機生產來講解該模式:

public interface Phone {
 void make();
}
public class MiPhone implements Phone {
 public MiPhone() {
     this.make();
 }
 @Override
 public void make() {
     // TODO Auto-generated method stub
     System.out.println("make xiaomi phone!");
 }
}
public class IPhone implements Phone {
 public IPhone() {
     this.make();
 }
 @Override
 public void make() {
     // TODO Auto-generated method stub
     System.out.println("make iphone!");
 }
}
public class PhoneFactory {
 public Phone makePhone(String phoneType) {
     if(phoneType.equalsIgnoreCase("MiPhone")){
         return new MiPhone();
     }
     else if(phoneType.equalsIgnoreCase("iPhone")) {
         return new IPhone();
     }
     return null;
 }
}
public class Demo {
 public static void main(String[] arg) {
     PhoneFactory factory = new PhoneFactory();
     Phone miPhone = factory.makePhone("MiPhone");            // make xiaomi phone!
     IPhone iPhone = (IPhone)factory.makePhone("iPhone");    // make iphone!
 }
}

工廠方法模式

和簡單工廠模式中工廠負責生產所有產品相比,工廠方法模式將生成具體產品的任務分發給具體的產品工廠,其UML類圖如下:

也就是定義一個抽象工廠,其定義了產品的生產介面,但不負責具體的產品,將生產任務交給不同的派生類工廠。這樣不用通過指定型別來建立物件了。

接下來繼續使用生產手機的例子來講解該模式。

其中和產品相關的Phone類、MiPhone類和IPhone類的定義不變。

AbstractFactory類:生產不同產品的工廠的抽象類

public interface AbstractFactory {
 Phone makePhone();
}

XiaoMiFactory類:生產小米手機的工廠(ConcreteFactory1)

public class XiaoMiFactory implements AbstractFactory{
 @Override
 public Phone makePhone() {
     return new MiPhone();
 }
}

AppleFactory類:生產蘋果手機的工廠(ConcreteFactory2)

public class AppleFactory implements AbstractFactory {
 @Override
 public Phone makePhone() {
     return new IPhone();
 }
}

演示:

public class Demo { public static void main(String[] arg) {     AbstractFactory miFactory = new XiaoMiFactory();     AbstractFactory appleFactory = new AppleFactory();     miFactory.makePhone();            // make xiaomi phone!     appleFactory.makePhone();        // make iphone! }}

GUI

邊界佈局(BorderLayout)

邊界佈局管理器把容器的的佈局分為五個位置:CENTER、EAST、WEST、NORTH、SOUTH。依次對應為:上北(NORTH)、下南(SOUTH)、左西(WEST)、右東(EAST),中(CENTER),如下圖所示。

特徵:

l 可以把元件放在這五個位置的任意一個,如果未指定位置,則預設的位置是CENTER。

l 南、北位置控制元件各佔據一行,控制元件寬度將自動佈滿整行。東、西和中間位置佔據一行;若東、西、南、北位置無控制元件,則中間控制元件將自動佈滿整個螢幕。若東、西、南、北位置中無論哪個位置沒有控制元件,則中間位置控制元件將自動佔據沒有控制元件的位置。

l 它是視窗、框架的內容窗格和對話方塊等的預設佈局。

1、 常見的構建函式和方法

構造方法摘要

BorderLayout(): 構造一個元件之間沒有間距(預設間距為0畫素)的新邊框佈局。

BorderLayout(int hgap, int vgap) : 構造一個具有指定元件(hgap為橫向間距,vgap為縱向間距)間距的邊框佈局。

方法摘要

int

getHgap() : 返回元件之間的水平間距。

int

getVgap() : 返回元件之間的垂直間距。

void

removeLayoutComponent(Component comp): 從此邊框佈局中移除指定元件。

void

setHgap(int hgap): 設定元件之間的水平間距。

void

setVgap(int vgap) : 設定元件之間的垂直間距。

網格佈局

網格佈局特點:

l 使容器中的各元件呈M行×N列的網格狀分佈。

l 網格每列寬度相同,等於容器的寬度除以網格的列數。

l 網格每行高度相同,等於容器的高度除以網格的行數。

l 各元件的排列方式為:從上到下,從左到右。

l 元件放入容器的次序決定了它在容器中的位置。

l 容器大小改變時,元件的相對位置不變,大小會改變。

l 設定網格佈局行數和列數時,行數或者列數可以有一個為零。若rows為0,cols為3,則列數固定為3,行數不限,每行只能放3個控制元件或容器。若cols為0,rows為3,則行數固定為3,列數不限,且每行必定有控制元件,若元件個數不能整除行數,則除去最後一行外的所有行元件個數為:Math.ceil(元件個數/rows)。

Math.ceil(double x):傳回不小於x的最小整數值。比如行數為3,元件數為13個,則Math.ceil(13/3)=5,即第一行,第二行元件數各為5個,剩下的元件放在最後一行。

l 若元件數超過網格設定的個數,則佈局管理器會自動增加網格個數,原則是保持行數不變。

構造方法摘要
GridLayout(): 建立具有預設值的網格佈局,即每個元件佔據一行一列。
GridLayout(int rows, int cols) :建立具有指定行數和列數的網格佈局。Rows為行數,cols為列數。
GridLayout(int rows, int cols, int hgap, int vgap) :建立具有指定行數、列數以及元件水平、縱向一定間距的網格佈局。