好程序員大數(shù)據(jù)實用教程之面向對象進階:包的創(chuàng)建與使用 > 是對一個程序中指定功能的部分代碼進行包裝 構造方法 > 是一個方法 > > 特殊點: > > 1. 構造方法沒有返回值,不是指的返回值類型是void,而是根本就不寫返回值類型 > 2. 方法名字和類名相同 > 3. 構造方法不能用static來修飾 > > 構造方法調(diào)用的時機: > > 1. 通俗來講:是在實例化一個對象的時候調(diào)用的 > > 一般情況下,我們在構造方法中做什么: > > 1. 對對象的某一些屬性進行初始化賦值操作 > 實例化對象的過程: > > Person xiaoming = new Person(); > > new : 表示在堆上開辟空間 > > 執(zhí)行非靜態(tài)代碼段 > > 然后再執(zhí)行構造方法: > 在構造方法中調(diào)用其他的構造方法 > > > 可以使用this()的方式來調(diào)用其他的構造方法 > > > > 注意事項: > > > > 1. this() 必須寫在構造方法的第一行 > > 2. 不能循環(huán)調(diào)用 > > 無參構造方法需要注意的問題 > > > 1. 如果一個類中沒有寫構造方法,此時這個類具有一個默認的public權限的無參構造方法 > > 2. 如果一個類中寫構造方法了,此時這個默認的public權限的無參構造方法將不再提供 代碼塊 > 非靜態(tài)代碼段 > > **靜態(tài)代碼段** > > ```java > static { > > } > // 當這個類第一次被加載到內(nèi)存中的時候執(zhí)行 > // 當你第一次使用這個類的時候執(zhí)行(實例化對象、調(diào)用靜態(tài)方法...) > ``` private關鍵字與屬性封裝 > 是一種編程思想: > > 狹義上的封裝: > > 一個類中的某一些屬性,我們不希望外界直接訪問。(外界賦的值可能不是我們想要的值)。此時,我們可以將這個屬性私有化(private),杜絕了外界直接訪問這個屬性的可能性。但是我們還需要再去提供用來訪問這個屬性的方法。(設置值、獲取值)(setter/getter) > > > > **private:** > > 是訪問權限修飾符的其中之一,可以用來修飾屬性和方法。被private修飾的成員,只能夠在當前的類中訪問 **單例設計模式** > 設計模式: > > 是前人總結出來的,用來解決特定問題的一個解決方案。 > > 單例設計模式: > > 用來解決,在不同的模塊中,我們需要訪問到同一個類的同一個對象。 > > > > 關于私有化構造方法: > > 其實這個操作,在單例中是不必須的。 1. 餓漢式 ```java /** * 在這個單例設計的過程中,只要我們用到了這個User類,instance都會實例化 * 此時,instance可能我們并不會使用到。所以會造成一定程度上的性能損耗。 */ class User { // 聲明一個私有的、靜態(tài)的、當前類的對象,并實例化 // 因為這個instance是靜態(tài)的,實例化的過程只會執(zhí)行一次 private static User instance = new User(); // 提供一個public權限的、靜態(tài)的、返回當前類對象的方法 public static User getUser() { // 將剛才實例化的instance返回,因為這個instance只會實例化一次,所以無論這個方法執(zhí)行多少次,最終返回的結果都是同一個對象 return instance; } } ``` 2. 懶漢式 ```JAVA /** * 使用的時候再去實例化instance,沒有多余的資源浪費 * 這種方式,在多線程環(huán)境中有問題 */ class User { // 聲明一個私有的、靜態(tài)的、當前類的對象,不對他進行實例化 // 什么時候需要獲取這個對象的時候,再去實例化 private static User instance; // 提供一個public權限的、靜態(tài)的、返回當前類對象的方法 public static User getUser() { // 在使用的時候,判斷instance是不是null, 如果是,對他做實例化,如果不是,直接使用即可 if (instance == null) instance = new User(); return instance; } } ``` |
|
來自: 好程序員IT > 《大數(shù)據(jù)培訓教程》