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();
}
}
答案 0 :(得分:0)
在您的示例static
项目中,Temp
方法意味着可以在不创建该类的Object的情况下调用它。
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
}
答案 1 :(得分:0)
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
类。例如,如果您想限制每个虚拟机创建的实例数量,例如使用Singleton
模式,就可以使用这种工作方式。