日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

《Effect Java》学习笔记1———创建和销毁对象

發(fā)布時(shí)間:2025/6/15 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《Effect Java》学习笔记1———创建和销毁对象 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

第二章 創(chuàng)建和銷毀對(duì)象

1.考慮用靜態(tài)工廠方法代替構(gòu)造器

  四大優(yōu)勢(shì)

    i. 有名稱

    ii. 不必在每次調(diào)用它們的時(shí)候都創(chuàng)建一個(gè)新的對(duì)象;

    ? iii. 可以返回原返回類型的任何子類型的對(duì)象;

      JDBC(Java Database Connectivity)

      服務(wù)提供者框架(Service Provider Framework)

         服務(wù)接口、提供者注冊(cè)API、服務(wù)訪問(wèn)API、服務(wù)提供者接口(負(fù)責(zé)創(chuàng)建其服務(wù)實(shí)現(xiàn)的實(shí)例);

    iv. 在創(chuàng)建參數(shù)類型實(shí)例的對(duì)象,它們使代碼變得更加簡(jiǎn)潔

  下面是一個(gè)Boolean(基本類型boolean的包裝類)的基本實(shí)現(xiàn):

public static Boolean valueOf(boolean b) {return b ? Boolean.TURE : Boolean.FALSE; }

?  美中不足處

    ① 類如果不會(huì)含公有的或者受保護(hù)的構(gòu)造器,就不能被子類化

   ?② 與其他的靜態(tài)方法實(shí)際上沒(méi)有區(qū)別

  常用的名稱

    valueOf  of  getInstance  newInstance  getType  newType

2.遇到多個(gè)構(gòu)造器參數(shù)時(shí),要考慮使用構(gòu)造器

    class.newInstance 破壞了編譯時(shí)的異常檢查(Builder彌補(bǔ)不足)

    總:如果類的構(gòu)造器或靜態(tài)工廠中具有多個(gè)參數(shù),考慮用Builder模式;

  下面是示例:

1 //Builder Pattern 2 public class NutritionFacts 3 { 4 private final int servingSize; 5 private final int servings; 6 private final int calories; 7 private final int fat; 8 private final int sodium; 9 private final int carbohydrate; 10 11 public static class Builder 12 { 13 //Required parameters 14 private final int servingSize; 15 private final int servings; 16 17 //Optional parameters - initialized to default values 18 private int calories = 0; 19 private int fat = 0; 20 private int carbohydrate = 0; 21 private int sodium = 0; 22 23 public Builder(int servingSize, int servings) 24 { 25 this.servingSize = servingSize; 26 this.servings = servings; 27 } 28 29 public Builder calories(int val) 30 { calories = val; return this; } 31 32 public Builder fat(int val) 33 { fat = val; return this; } 34 35 public Builder carbohydrate(int val) 36 { carbohydrate = val; return this; } 37 38 public NutritionFacts build() { 39 return new NutritionFacts(this); 40 } 41 } 42 43 private NutritionFacts(Builder builder) { 44 servingSize = builder.servingSize; 45 servings = builder.servings; 46 calories = builder.calories; 47 } 48 }

?

?

3.用私有構(gòu)造器或者枚舉類型強(qiáng)化Singleton屬性

  單元素的枚舉類型已經(jīng)成為實(shí)現(xiàn)Singleton的最佳方法

    實(shí)現(xiàn)方式一公有靜態(tài)成員是一個(gè)final域

//Singleton with public final field public class Elvis {public static final Elvis INSTANCE = new Elvis();private Elvis() {......} public void leaveTheBuilding() {......} }

    實(shí)現(xiàn)方式二: ?公有的成員是個(gè)靜態(tài)工廠方法

//Singleton with static factory public class Elvis {private static final Elvis INSTANCE = new Elvis();private Elvis() {......}public static Elvis getInstance() { return INSTANCE;}public void leaveTheBuilding() {......} }

    實(shí)現(xiàn)方式三(最佳實(shí)現(xiàn)方式)

        只需編寫一個(gè)包含單個(gè)元素的枚舉類型;

      這種方法在功能上與公有域方法相近,當(dāng)是它更加簡(jiǎn)潔,無(wú)償?shù)靥峁┝诵蛄谢瘷C(jī)制,絕對(duì)防止多次實(shí)例化,即使是在面對(duì)復(fù)雜的序列化或者反射攻擊的時(shí)候。

//Enum singleton - the preferred approach public enum Elvis {INSTANCE;public void leaveTheBuilding() {......} }

      

4.通過(guò)私有化構(gòu)造器強(qiáng)化不可實(shí)例化的能力

  throw new AssertionError(); (構(gòu)造器內(nèi))

  可在上面加入注釋,便于理解,如下:

    suppress default coustructor for noninstratiability.

? ? 示例如下:

//Noinstantialbe utility class public class UtilityClass {//Suppress default constructor for noninstiabilityprivate UtilityClass() {throw new AssertionError();} ...... //Remainder omitted }

?

5.避免創(chuàng)建不必要的對(duì)象

  update。。。。

轉(zhuǎn)載于:https://www.cnblogs.com/jesonjason/p/5536245.html

總結(jié)

以上是生活随笔為你收集整理的《Effect Java》学习笔记1———创建和销毁对象的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。