основная функция Java - PullRequest
1 голос
/ 12 июня 2010

public static void main() & public void main() В чем разница между этими двумя?

Ответы [ 7 ]

8 голосов
/ 12 июня 2010

Первый - это (потенциально) метод точки входа (если он имеет аргумент String[]). Последнее не.

Правило состоит в том, что метод точки входа должен иметь подпись:

public static void main(String[])

Если мы проигнорируем вопрос о «входной точке», тогда разница между «статическим» и обычным методами будет следующей:

  • Обычный метод может быть вызван только для целевого объекта, но он может обращаться к переменным экземпляра целевого объекта посредством явного или неявного использования this.

  • Статический метод не вызывается для целевого объекта и не может получить доступ к переменным экземпляра через this.

3 голосов
/ 12 июня 2010

Статические функции принадлежат классу (то есть они не используют переменные экземпляра (объектные переменные)).

1 голос
/ 12 июня 2010
public static void main(String[] args)

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

YourClass.main(new String[] {"hello"})

Однако, когда вы компилируете свою программу в исполняемый файл .jar, java автоматически узнает, как запустить этот метод.Это отправная точка вашей программы.

В терминале вы запустите ее так:

java -jar YourClass.jar hello

Otherметоды также могут быть сделаны статическими

public static void myOtherFunction()

Разница здесь в том, что myOtherFunction () НЕ является отправной точкой приложения, но может использоваться в любом месте вашего приложения, в котором оно вам больше всего нужно, вы также этого не делаете.нужен экземпляр класса, чтобы использовать его.

public void main()

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

YouClass me = new YouClass();
me.main();

Никогдавызывать любой метод main () без подписи

public static void main(String[] args)

т.е.точка входа в приложение.Это может сбить с толку людей, читающих ваш код.

0 голосов
/ 12 июня 2010

varargs версия:

public static void main(String... args) {

    for (String arg : args) {
        System.out.println("Argument: " + arg);
    }
}

Доступно с Java 5.

0 голосов
/ 12 июня 2010

На самом деле static позволяет инициализировать только один экземпляр главной функции. Все статические методы могут быть вызваны без создания экземпляра этого класса. Это глобально. Main всегда находится в статическом состоянии.

0 голосов
/ 12 июня 2010

Все просто: первый main равен staticp в нижнем регистре ;-P)

И смысл очевиден: убедитесь, что точка входа существует раньше остальных, и сообщите структуре, где находится точка входа.

0 голосов
/ 12 июня 2010

Статический означает, что функция не нуждается в экземпляре класса для вызова.

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