В основном методе, почему мы можем вызвать конструктор того же класса? - PullRequest
0 голосов
/ 19 сентября 2019

Это просто контрастирует с моим пониманием.Пожалуйста, поправьте меня, если я ошибаюсь.Java не допускает статическую ссылку на нестатические методы, но мы все время вызываем метод конструктора из метода main ... Я предполагаю, что конструкторы здесь неявно нестатичны.

    public class Temp {
        // Constructor
        public Temp(){
        }
        public static void main(String[] args) {
            // Calling constructor within main method
            Temp tmp = new Temp();
        }
    }

1 Ответ

0 голосов
/ 19 сентября 2019

это комбинация как нового, так и конструктора, причина, по которой разрешается вызов конструктора в методе main.если предположим, создайте конструктор:

public SampleTest () {}

, вызывая его из основного метода:

Сценарий 1: если я напрямую вызываю этот конструктор из метода main без нового ключевого слова ::

    SampleTest();

Результат 1: это вызывает исключение времени компиляции "Метод SampleTest ()не определено для типа SampleTest "

Сценарий 2: , если я создал метод с именем SampleTest () в этом классе, как показано ниже (который имеет возвращаемый тип как void, как мынет возвращаемых типов для конструкторов):

  public void SampleTest() {}

  public static void main(String[] args){
    SampleTest();
  }

Результат 2: выдает исключение времени компиляции "Невозможно сделать статическую ссылку на нестатический методSampleTest () из типа SampleTest "

Сценарий 3: теперь, если добавить новое ключевое слово перед вызовом конструктора, как показано ниже:

  new  SampleTest();

Результат 3: , теперь только с комбинацией оператора new с конструктором 1041 * вызов разрешен в методе main, без каких-либо исключений.

Итак, наконец, причина вызова конструктора из метода main - это сочетание new и constructor.в противном случае он рассматривает конструктор как любой другой метод экземпляра, генерирует исключения, как в результатах 1 и 2.

...