JAVA方法调用查询

时间:2018-09-06 13:41:15

标签: java core

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. 在上述程序中,注释行对我来说不容易理解吗? 谁能很好地说明如何使用对象创建调用静态方法

2 个答案:

答案 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模式,就可以使用这种工作方式。