Создает ли Java внутренне объект класса, который содержит метод main? - PullRequest
0 голосов
/ 21 декабря 2018

Поскольку мы знаем, что если мы хотим создать object из class, нам нужно что-то сделать:

class MyClass{
// ...
}

И для создания object мы делаем:

MyClass MyObj = new MyClass();

Теперь, если мы хотим создать программу на Java, нам нужно иметь main метод внутри class, и у class должно быть то же имя, что и у имени файла.

Например:

// file MyFile.java
public class MyFile{
    public static void main(String[] args){
      // ...
    }
}

Теперь вопрос заключается в том, будет ли объект класса MyFile также внутренним образом создаваться java при запуске этой программы, чтобы начать выполнение файла Java с помощью вызоваметод main или он вызывает метод main статически как:

MyFile.main(String[] args);

И что будет, если у меня есть класс (ы) в MyFile классе как:

public class MyFile{

    class HelloWorld{
        // ...
    }

    public static void main(String[] args){
        // ...
    }
}

Или иметь нестатические свойства и методы, такие как:

public class MyFile{

    int x = 10;

    public void MyWorld(){
        // ...
    }

    public static void main(String[] args){
        // ...
    }

    int y = 10;

    public void ByeWorld(){
        // ...
    }

}

и т. Д.

Теперь, какой будет сценарий?Будет ли java внутренне создавать объект класса MyFile?Какие действия java будут выполнять в ситуациях такого типа, чтобы запустить программу с помощью метода main, а также загрузить другие объекты до и после метода main?Какими будут действия, выполняемые java внутри в этих ситуациях?

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

В дополнение к ответу Джона Скита мы можем использовать пример кода, чтобы доказать, что экземпляр включающего класса не создан при вызове метода main:

public class Test {
    public Test() {
        System.out.println("Test2");
    }

    public static void main(String[] args) {
       System.out.println("Test");
    }
}

Вывод этой программы просто:

Test

Если бы был создан экземпляр, вы бы увидели Test2, напечатанный и на консоли.

0 голосов
/ 21 декабря 2018

Ни один экземпляр класса не создается автоматически при запуске JVM.Метод main вызывается только статически - поэтому он должен быть статическим с самого начала.

Класс инициализирован , поэтому, если у вас есть статический инициализатор, что будет выполнено перед методом main, но экземпляр класса не будет создан.В этом нет необходимости, и это приведет к ненужным осложнениям.(Что бы вы ожидали, если бы вы включили конструкторы только с параметрами, например?)

Подробнее о запуске JVM см. главу 12 спецификации языка Java .

...