2 回答

TA貢獻1155條經驗 獲得超0個贊
一個static方法意味著它可以在不創建一個類的對象,在你的例子被稱為Temp項目。
static Temp create(int data)
static你的方法中的詞是什么讓你這樣做。然后可以以靜態方式調用該方法,這意味著在您的示例中使用className.methodName,Temp.create()
并且由于您的方法正在返回一個Temp對象,因此您將其放入一個 Temp 對象中
Temp obj = Temp.create(20);
在Temp obj您將在您的方法中創建的對象的結果放在行中
{Temp obj = new Temp(data);
return obj; //this is your object
}

TA貢獻1887條經驗 獲得超5個贊
class Temp
{
private Temp(int data)
{
System.out.printf(" Constructor called ");
}
protected static Temp create(int data)
{Temp obj = new Temp(data);
return obj;
}
public void myMethod()
{
System.out.printf(" Method called ");
}
}
public class Test
{
public static void main(String[] args)
{
Temp obj = Temp.create(20); //How this is a method call?
obj.myMethod();
}
}
類的構造函數始終遵循相同的簽名:[訪問修飾符 -> 受保護、公共、私有、默認] [類的名稱](參數)
所以,在你的代碼中,
private Temp(int data) {
System.out.printf(" Constructor called ");
}
是你的構造函數。
為了使用你的Temp類,至少是它的非靜態成員,你需要一個類的實例才能使用它,但是,由于你的構造函數被聲明為私有,一個實例只能在非常相同的班級。
這就是你在這里所做的:
protected static Temp create(int data)
{Temp obj = new Temp(data);
return obj;
}
這個方法是一個靜態方法,意味著一旦類加載到內存中,它就會“存在”,即使類沒有被實例化。由于它被聲明為受保護的,而不是私有的,因此它可以被 的子類以及Temp與 位于同一包中Temp的Test類使用,例如您的類。
您的Test類調用此方法,該方法調用構造函數,并將創建的實例返回給Test類。這種工作方式用于某些場景,例如,如果您想限制每個 VM 創建的實例數量,就像Singleton模式一樣。
添加回答
舉報