首頁 > Java > java教程 > Java實作私有建構器的使用方法詳解

Java實作私有建構器的使用方法詳解

黄舟
發布: 2017-09-14 10:48:52
原創
1879 人瀏覽過

這篇文章主要介紹了Java私有建構器的意義、關鍵字,同時透過實例向大家展示其使用方法,需要的朋友可以參考下

建構器作為Java類別的一個特殊的成員同樣可以設定關鍵字來控制其存取權限。在大多數情況下,我們一般把建構器設定為公有成員,也就是public的,在預設情況下,如果不寫任何關鍵字,其存取權限也是public。這樣,在我們新建一個類別的物件的時候,構造器會創建物件後被自動調用,發生在其他類別成員被設定為預設初始值之後,當然如果有字段初始器和初始化區塊的話,構造器的調用會發生在此之後。建構器的主要作用是在new將物件的參考傳回之前初始化物件。

言歸正傳,什麼叫私有建構器。所謂私有建構器,就是用private關鍵字宣告的建構器,也就是使用private關鍵字宣告的建構子。 。與一般公有建構器最大的差別在於,其存取權限是private,於是它只能被包含它的類別本身所訪問,而無法在類別的外部調用,故而可以阻止物件的生成。所以,如果一個類別只有一個私有建構器,而沒有任何公有建構器,是無法產生任何物件的。

由於類別的建構子時私有的,所以此類不能被實例化,同時也不能被繼承。 《Effective Java》第三條:用私有構造器或枚舉強化Singleton屬性。所謂Singleton屬性是指僅僅被實例化一次的類別。第四條:透過私有建構器強化不可實例化的能力。在Java中實作Singleton有兩種方式:


public class Elvis {
 public static final Elvis INSTANCE = new Elvis();
 private Elvis() {}
}
登入後複製


#
public class Elvis {
 private static final Elvis INSTANCE = new Elvis();
 private Elvis() {}
 public static Elvis getInstance() { return INSTANCE;}
}
登入後複製

方法一:私有建構子只能被呼叫一次,用來實例化公有的靜態final域Elvis.INSTANCE,一旦Elvis被實例化,只會存在一個Elvis實例(享有特權的客戶端可以藉助AccessibleObject.setAccessible方法透過反射機制呼叫私有建構器);

方法二:使用靜態方法getInstance傳回同一個物件的引用,永遠不會建立其他Evlis實例。

為什麼需要私有建構器,如果類別不能被實例化該怎麼使用這個類別的方法?

私有建構器的存在可以讓某些類別不能被實例化和子類別化,這些類別通常是一些工具類,例如java.lang.Math等,存取這些類別的方法我們可以定義公有的靜態方法來實現,如A.methon()


public class A {
 private A() {}
 public static void methon() {}    
}
登入後複製

java.lang.Math中私有建構器的使用,可以看到Math類別被定義是final的,使用了private的建構函數,它的方法都是static的,所以呼叫其方法只需要Math.sin(x):


##

public final class Math {
 private Math() {}
 public static final double E = 2.7182818284590452354;
 public static final double PI = 3.14159265358979323846;
 public static double sin(double a) {
  return StrictMath.sin(a); // default impl. delegates to StrictMath
 } 
 public static double cos(double a) {
  return StrictMath.cos(a); // default impl. delegates to StrictMath
 }
 public static double tan(double a) {
  return StrictMath.tan(a); // default impl. delegates to StrictMath
 }
 ......
 public static float scalb(float f, int scaleFactor) {
  return sun.misc.FpUtils.scalb(f, scaleFactor);
 }
}
登入後複製

以上是Java實作私有建構器的使用方法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板