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