Точка входа для приложений Java: main (), init () или run ()? - PullRequest
38 голосов
/ 04 ноября 2008

До сих пор я использовал public void run() {} методы для выполнения своего кода на Java. Когда / почему можно использовать main() или init() вместо run()?

Ответы [ 5 ]

72 голосов
/ 04 ноября 2008

Это специфический вопрос, потому что он не должен быть вопросом выбора.

Когда вы запускаете JVM, вы указываете класс для запуска, и это main() этого класса, где запускается ваша программа.

Под init() я полагаю, вы имеете в виду метод JApplet. Когда апплет запускается в браузере, метод init() указанного апплета выполняется как первый бизнес-порядок.

Под run() я предполагаю, что вы имеете в виду метод Runnable. Этот метод вызывается при запуске нового потока.

  • main: запуск программы
  • init: запуск апплета
  • Выполнить: начало потока

Если Eclipse использует ваш метод run(), даже если у вас нет main(), он делает что-то своеобразное и нестандартное, но не невозможное. Возможно, вам следует опубликовать пример класса, который вы использовали таким образом.

17 голосов
/ 04 ноября 2008

Метод main является точкой входа в приложение Java.

В частности, 、 когда виртуальной машине Java приказывают запустить приложение, указав его класс (с помощью средства запуска приложения java), он будет искать метод main с подписью public static void main(String[]).

Со страницы ВС java :

Инструмент java запускает приложение Java. Это делает это, начиная среда выполнения Java, загрузка указанного класса и вызов метод класса main .

Метод должен быть объявлен как public и static, он не должен возвращать никаких значение, и он должен принять массив String в качестве параметра. Метод объявление должно выглядеть следующим образом:

public static void main(String args[])

Дополнительные сведения о том, как выполняется приложение Java, см. В следующих источниках:

  1. Глава 12: Выполнение из Спецификации языка Java, третье издание .
  2. Глава 5: Связывание, загрузка, инициализация из Характеристики виртуальной машины Java, второе издание .
  3. Подробное описание приложения "Hello World" из Java Tutorials .

Метод run является точкой входа для нового Thread или класса, реализующего интерфейс Runnable. Он не вызывается виртуальной машиной Java при запуске командой java.

Поскольку сам Thread или Runnable не может быть запущен непосредственно виртуальной машиной Java, поэтому он должен вызываться методом Thread.start(). Это можно сделать, создав экземпляр Thread и вызвав его метод start в методе main приложения:

public class MyRunnable implements Runnable
{
    public void run()
    {
        System.out.println("Hello World!");
    }

    public static void main(String[] args)
    {
        new Thread(new MyRunnable()).start();
    }
}

Для получения дополнительной информации и примера того, как запустить подкласс Thread или класс, реализующий Runnable, см. Определение и запуск потока из учебников по Java.


Метод init - это первый метод, вызываемый в Applet или JApplet .

Когда апплет загружается плагином Java браузера или программой просмотра апплета, он сначала вызывает метод Applet.init. Любые инициализации, которые требуются для использования апплета, должны быть выполнены здесь. После завершения метода init вызывается метод start.

Для получения дополнительной информации о том, когда вызывается метод апплета init, прочитайте о жизненном цикле апплета в Жизненный цикл апплета из учебников по Java.

См. Также: Как сделать апплеты из руководства по Java.

3 голосов
/ 04 ноября 2008

В Java есть специальный статический метод:

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

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

$ java Class

будет выполнять указанный метод в классе "Class", если он существует.

public void run() { ... }

требуется интерфейсом Runnable или наследуется от класса Thread при создании новых потоков.

2 голосов
/ 04 ноября 2008

Метод main() является точкой входа для приложения Java. run() обычно используется для новых потоков или задач.

Где вы писали метод run(), какое приложение вы пишете (например, Swing, AWT, консоль и т. Д.) И какова ваша среда разработки?

0 голосов
/ 06 марта 2012

как новичок, я импортирую пакеты acm, и в этом пакете run () начинает выполнение потока, init () инициализирует Java-апплет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...