Запрос вызова метода JAVA - PullRequest
       2

Запрос вызова метода JAVA

0 голосов
/ 06 сентября 2018
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 голосов
/ 06 сентября 2018
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, по крайней мере, его нестатические члены, вам понадобится экземпляр класса, чтобы иметь возможность его использовать, но, поскольку ваш конструктор объявлен как private, экземпляр может быть создан только в том же классе.

Вот что вы делаете здесь:

protected static Temp create(int data)
        {Temp obj = new Temp(data);
            return obj;
        }

Этот метод является статическим, то есть он «существует», как только класс загружается в память, даже без создания экземпляра класса. Поскольку он объявлен защищенным, а не закрытым, он может использоваться подклассами Temp и классами, которые находятся в том же пакете, что и Temp, например, ваш класс Test.

Ваш класс Test вызывает этот метод, который вызывает конструктор и возвращает созданный экземпляр в класс Test. Этот способ работы используется в определенных сценариях, например, если вы хотите ограничить количество экземпляров, создаваемых на виртуальную машину, например, с шаблоном Singleton.

0 голосов
/ 06 сентября 2018

A static метод означает, что он может быть вызван без создания объекта этого класса, в вашем примере Temp item.

 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...