Когда выполняется main?

165
11 августа 2021, 00:40

Есть Class1, в котором создаётся экземпляр Class2:

public class Class1 {
    public static void main(String[] args) {
        Class2 class2 = new Class2("Hello");
    }
}

Class2:

public class Class2 {
    static String hello;
    Class2( String hello){
       this.hello = hello;
    }
    public static void main(String[] args) {
        System.out.print(hello);
    }
}

Почему при таком создании экземпляра Class2 не исполняется его метод main? Разве создание класса не должно автоматически исполнять его метод main?

Answer 1

Метод

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

Является, в некотором смысле, маяком для компилятора. Он позволяет определить, что класс, в котором расположен этот метод, является стартовым и с него нужно начинать работу приложения.

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

Foo foo = new Foo();

Что подразумевает выполнения метода-конструктора в классе Foo, а не выполнения его main.

class Foo {
    public Foo() {
        // Конструктор
    }
}

Таким образом, в случае, если вы хотите, чтобы ваш класс Class2 при создании выводил на экран переменную hello, то вам необходимо определить метод для этого:

    public class Class2 {
    static String hello;
    Class2(String hello){
       this.hello = hello;
       printHello();
    }
    void printHello(){
       System.out.println(this.hello);
    }
Answer 2

метод main используется как точка входа приложения. Если вы хотите передать аргумент при создании объекта:

Class2 obj = new Class2("Hello");

то вам нужно добавить конструктор и в нем уже работать с аргументами. Или создать метод в классе Class2 и вызывать его уже после создания объекта, передавая в него аргумент.

obj.myPrint("Hello"); 
READ ALSO
Как кодировать audio файл в строку Base64?

Как кодировать audio файл в строку Base64?

Я загружаю файл audio через onActivityResult(), мне нужно его отправить на сервер (php) с помощью библиотеки volleyКак мне кодировать audio в строку base64

192
Возможные перестановки по длине

Возможные перестановки по длине

У меня есть какой то массив со словами, который я сортирую по длинеХочу сделать так, что бы на выходе он выдавал все возможные перестановки

357
Тормозит автотест

Тормозит автотест

Занимаюсь написанием автотестовНедавно стал очень сильно тормозить (работает по 3, 9, 49 минут, в зависимости от тестового стенда, когда раньше...

273
Передать данные из Popup в НЕвызывающую Активити. Как грамотно организовать?

Передать данные из Popup в НЕвызывающую Активити. Как грамотно организовать?

Есть Activity0, в которой создается обьект созданного мной класса (ToggleValues)Этот обьект настраивает всплывающее окно с EditText, кнопками OK и CANCEL, и запускает...

155