JAVA方法调用查询 在上面的程序中,评论的行对我来说是不可理解的? 有人能很好地解释如何使用对象创建调用静态方法吗

JAVA方法调用查询 在上面的程序中,评论的行对我来说是不可理解的? 有人能很好地解释如何使用对象创建调用静态方法吗,java,core,Java,Core,static方法意味着可以在不创建该类的对象的情况下调用它,在您的示例中是Temp项 class Temp { private Temp(int data) { System.out.printf(" Constructor called "); } protected static Temp create(int data) {Temp obj = new Temp(data); return obj; }

static
方法意味着可以在不创建该类的对象的情况下调用它,在您的示例中是
Temp

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();
    }
}
方法中的
静态
字就是允许您这样做的。 然后可以静态调用该方法,这意味着在您的示例中使用className.methodName,
Temp.create()

由于您的方法返回一个
Temp
对象,所以您将其放入一个Temp对象中

 static Temp create(int data)
Temp obj
中,您将在方法中创建的对象的结果放入行中

Temp obj = Temp.create(20);
类的构造函数始终遵循相同的签名: [访问修饰符->受保护、公共、私有、默认][类名称](参数)

所以,在你的代码中

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();
    }
}
是您的构造函数

为了使用
Temp
类,至少是它的非静态成员,您需要一个类的实例才能使用它,但是,由于构造函数声明为私有,因此只能在同一个类中创建实例

这就是你在这里所做的:

private Temp(int data) {
  System.out.printf(" Constructor called ");
}
这个方法是一个静态方法,这意味着一旦类加载到内存中,它就“存在”,即使没有实例化类。 因为它被声明为受保护的,而不是私有的,所以它可以被
Temp
的子类使用,也可以被与
Temp
位于同一个包中的类使用,比如您的
Test


您的
Test
类调用此方法,该方法调用构造函数,并将创建的实例返回给
Test
类。这种工作方式在某些场景中使用,例如,如果您想限制每个VM创建的实例数量,如使用
Singleton
模式。

Temp obj=Temp.create(20)//这是一个怎样的方法调用?obj.myMethod();那我们为什么要用这个?什么是temp.create(20)?不使用对象创建调用静态方法,而是使用静态方法创建对象。静态方法在任何实例存在之前就存在,如果删除所有实例,静态方法仍然可用。在您的代码中,构造函数是私有的,因此不能从类外访问,这意味着您需要一些构造(如静态方法)来调用受保护的静态Temp create(int data)-->这是一个构造函数还是一个方法我如何识别?静态意味着类级别,我想如果您了解静态vs实例是什么/做什么,你会很快理解这个概念。通读以下内容:构造函数总是将[access修饰符][类名称](参数)作为签名。其中没有返回类型或void(ever),因此create(int data)显然是一个method。因此,在method中返回对象时,我们需要为该方法创建对象吗?这就是你想说的吗?返回的对象就是你用
Temp obj=new Temp(data)创建的对象
Temp obj
是将创建的对象放入方法的位置。我还将此信息添加到我的回答中。否,该方法通过调用构造函数“受保护的静态临时创建(int data){Temp obj=new Temp(data);return obj;}”来创建对象。在上述方法中,为什么我们在mwthod中编写了类名称为“Temp”?因为您正在调用静态方法(create)来自临时班。可以通过一个实例调用静态方法,但对于这个实例,这并不总是可能的(您只能在调用此方法后拥有一个实例)
private Temp(int data) {
  System.out.printf(" Constructor called ");
}
protected static Temp create(int data)
        {Temp obj = new Temp(data);
            return obj;
        }