在這個(gè)實(shí)例中,我們將學(xué)習(xí)用Java實(shí)現(xiàn)私有構(gòu)造函數(shù)。
要理解此示例,您應(yīng)該了解以下Java編程主題:
class Test {
//創(chuàng)建私有構(gòu)造函數(shù)
private Test () {
System.out.println("這是一個(gè)私有構(gòu)造函數(shù)。");
}
//創(chuàng)建一個(gè)公共靜態(tài)方法
public static void instanceMethod() {
//創(chuàng)建一個(gè)Test類(lèi)的實(shí)例
Test obj = new Test();
}
}
class Main {
public static void main(String[] args) {
//調(diào)用instanceMethod()
Test.instanceMethod();
}
}輸出結(jié)果
這是一個(gè)私有構(gòu)造函數(shù)。
在上面的示例中,我們創(chuàng)建了Test類(lèi)的私有構(gòu)造函數(shù)。因此,我們不能在Test類(lèi)之外創(chuàng)建該類(lèi)的對(duì)象。
這就是為什么我們?cè)陬?lèi)內(nèi)部創(chuàng)建了一個(gè)名為 instanceMethod()的公共靜態(tài)方法,該方法用于創(chuàng)建Test類(lèi)的對(duì)象。 在Main類(lèi)中,我們使用類(lèi)名調(diào)用該方法。
Java 單例設(shè)計(jì)模式可確保一個(gè)類(lèi)只有一個(gè)實(shí)例。為此,我們使用私有構(gòu)造函數(shù)。
class Language {
//創(chuàng)建一個(gè)類(lèi)類(lèi)型的公共靜態(tài)變量
private static Language language;
//私有構(gòu)造函數(shù)
private Language() {
System.out.println("內(nèi)部私有構(gòu)造函數(shù)");
}
//公共靜態(tài)方法
public static Language getInstance() {
//創(chuàng)建對(duì)象(如果尚未創(chuàng)建)
if(language == null) {
language = new Language();
}
//返回單例對(duì)象
return language;
}
public void display() {
System.out.println("實(shí)現(xiàn)了單例模式");
}
}
class Main {
public static void main(String[] args) {
Language db1;
//調(diào)用getInstance方法
db1= Language.getInstance();
db1.display();
}
}輸出結(jié)果
內(nèi)部私有構(gòu)造函數(shù) 實(shí)現(xiàn)了單例模式
在上面的示例中,我們創(chuàng)建了一個(gè)名為L(zhǎng)anguages的類(lèi)。該類(lèi)包含:
language - 類(lèi)類(lèi)型 private 變量
Language() - private 構(gòu)造函數(shù)
getInstance() - public static 類(lèi)類(lèi)型方法
display() - public 方法
由于構(gòu)造函數(shù)是私有的,因此我們不能從外部類(lèi)創(chuàng)建Language對(duì)象。 因此,我們?cè)趃etInstance()方法內(nèi)創(chuàng)建了該類(lèi)的對(duì)象。
但是,我們以?xún)H創(chuàng)建一個(gè)對(duì)象的方式設(shè)置了條件。 并且,該方法返回對(duì)象。
注意這一行,
db1 = Language.getInstance();
這里,
db1 是 Language 類(lèi)型的變量
Language.getInstance() - 調(diào)用方法getInstance()
由于getInstance()返回Language類(lèi)的對(duì)象,因此為db1變量分配了返回的對(duì)象。
最后,我們使用對(duì)象調(diào)用了display()方法。