java - JAVA方法调用查询
问题描述
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();
}
}
- 在上面的程序中,注释行对我来说是无法理解的?任何人都可以很好地解释如何使用对象创建来调用静态方法
解决方案
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
模式一样。
推荐阅读
- ruby - 无法在生产服务器中使用 wicked pdf gem 生成 pdf
- rabbitmq - rabbitmq 交换是否有 ttl 选项?
- docker - 尝试将 clickhouse 堆栈部署到 docker swarm 并出现错误:Service Builder failed to build: COPY failed
- elasticsearch - 有没有办法分析弹性搜索序列化/反序列化?
- ruby-on-rails - 使用导轨生成带有编号的 UPC 条码
- python - 根据 csv 文件名命名数据框?
- ios - 得到 NSUnknownKeyException' 的错误,原因:setValue:forUndefinedKey: 这个类不符合键描述的键值编码
- spring - Spring Boot应用程序无故关闭
- android - 使用套接字 wifip2p 发送文件列表
- css - 这个 CSS 代码对 wordpress 网站有什么影响?