首页 > 解决方案 > 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();
    }
}
  1. 在上面的程序中,注释行对我来说是无法理解的?任何人都可以很好地解释如何使用对象创建来调用静态方法

标签: javacore

解决方案


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模式一样。


推荐阅读