天天看點

大資料實用教程之面向對象進階

大資料實用教程之面向對象進階:包的建立與使用

是對一個程式中指定功能的部分代碼進行包裝

構造方法

是一個方法

特殊點:

構造方法沒有傳回值,不是指的傳回值類型是void,而是根本就不寫傳回值類型

方法名字和類名相同

構造方法不能用static來修飾

構造方法調用的時機:

通俗來講:是在執行個體化一個對象的時候調用的

一般情況下,我們在構造方法中做什麼:

對對象的某一些屬性進行初始化指派操作

執行個體化對象的過程:

Person xiaoming = new Person();

new : 表示在堆上開辟空間

執行非靜态代碼段

然後再執行構造方法:

在構造方法中調用其他的構造方法

可以使用this()的方式來調用其他的構造方法

注意事項:

this() 必須寫在構造方法的第一行

不能循環調用

無參構造方法需要注意的問題

如果一個類中沒有寫構造方法,此時這個類具有一個預設的public權限的無參構造方法

如果一個類中寫構造方法了,此時這個預設的public權限的無參構造方法将不再提供

代碼塊

非靜态代碼段

靜态代碼段

static {

}

// 當這個類第一次被加載到記憶體中的時候執行

// 當你第一次使用這個類的時候執行(執行個體化對象、調用靜态方法...)

private關鍵字與屬性封裝

是一種程式設計思想:

狹義上的封裝:

​ 一個類中的某一些屬性,我們不希望外界直接通路。(外界賦的值可能不是我們想要的值)。此時,我們可以将這個屬性私有化(private),杜絕了外界直接通路這個屬性的可能性。但是我們還需要再去提供用來通路這個屬性的方法。(設定值、擷取值)(setter/getter)

private:

​ 是通路權限修飾符的其中之一,可以用來修飾屬性和方法。被private修飾的成員,隻能夠在目前的類中通路

單例設計模式

設計模式:

​ 是前人總結出來的,用來解決特定問題的一個解決方案。

單例設計模式:

​ 用來解決,在不同的子產品中,我們需要通路到同一個類的同一個對象。

關于私有化構造方法:

​ 其實這個操作,在單例中是不必須的。

餓漢式

/**

  • 在這個單例設計的過程中,隻要我們用到了這個User類,instance都會執行個體化
  • 此時,instance可能我們并不會使用到。是以會造成一定程度上的性能損耗。

    */

class User {

// 聲明一個私有的、靜态的、目前類的對象,并執行個體化
// 因為這個instance是靜态的,執行個體化的過程隻會執行一次
private static User instance = new User();
// 提供一個public權限的、靜态的、傳回目前類對象的方法
public static User getUser() {
    // 将剛才執行個體化的instance傳回,因為這個instance隻會執行個體化一次,是以無論這個方法執行多少次,最終傳回的結果都是同一個對象
    return instance;
}           

懶漢式

  • 使用的時候再去執行個體化instance,沒有多餘的資源浪費
  • 這種方式,在多線程環境中有問題
// 聲明一個私有的、靜态的、目前類的對象,不對他進行執行個體化
// 什麼時候需要擷取這個對象的時候,再去執行個體化
private static User instance;
// 提供一個public權限的、靜态的、傳回目前類對象的方法
public static User getUser() {
    // 在使用的時候,判斷instance是不是null, 如果是,對他做執行個體化,如果不是,直接使用即可
    if (instance == null)
        instance = new User();
    
    return instance;
}           

繼續閱讀