Подтвердить что ты не робот

Public static void main (String arg []) в java исправлен?

Недавно я спросил на экзамене, был ли исправлен формат public static void main(String arg[]) метода main? Можем ли мы изменить его? Можем ли мы использовать main без каких-либо public, static или void? Если нет, то почему это не жестко закодировано, что main(String arg[]) всегда будет стоять за public static void main(String arg[])?

4b9b3361

Ответ 1

Подпись основного метода указана в разделе в разделе 12.1.4 на языке Java и четко заявляет:

Основной метод должен быть объявлен public, static и void. Это должно укажите формальный параметр (§8.4.1), объявленный тип которого является массивом Строка.

  • он должен быть public, иначе было бы невозможно назвать его
  • он должен быть static, так как у вас нет способа создать экземпляр объекта перед его вызовом
  • список аргументов String позволяет передавать параметры при выполнении программы Java из командной строки. Было бы возможно определить его без аргументов, но более практично (и аналогично другим языкам)
  • тип возврата void, поскольку нет смысла иметь что-либо еще: программа Java может завершиться до достижения основного метода (например, путем вызова System.exit())

Таким образом, сигнатура метода может быть:

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

обратите внимание, что версия varargs (...) действительна только для Java 5

Поскольку язык Java позволяет размещать скобки [] после типа или переменной (первое, как правило, предпочтительнее),

public static void main( String args[] ) // valid but usually non recommended

также справедливо

Ответ 2

Если вы посмотрите исходный код JDK (jdk-src\j2se\src\share\bin\java.c):

/* Get the application main method */
mainID = (*env)->GetStaticMethodID(env, mainClass, "main",
                   "([Ljava/lang/String;)V");
...
{    /* Make sure the main method is public */
...
mods = (*env)->CallIntMethod(env, obj, mid);
if ((mods & 1) == 0) { /* if (!Modifier.isPublic(mods)) ... */
    message = "Main method not public.";
    messageDest = JNI_TRUE;
    goto leave;
...

Совершенно ясно, что он должен иметь только эту подпись.

Ответ 3

Public - это своего рода спецификатор доступа, благодаря которому мы можем получить доступ к нему извне класса. Поскольку main - это функция, которая действует как точка выполнения. Основная функция вызывается JVM, которая находится вне класса, поэтому она должна быть объявлена ​​публичной.

Static - это своеобразное ключевое слово, используемое в java, чтобы указать, что нет необходимости создавать какой-либо его экземпляр. Поскольку мы знаем, что основной метод также находится внутри класса и для доступа к конкретной функции класса извне класса (в этом случае из JVM), необходим экземпляр этого конкретного класса, поэтому, чтобы избежать этого, мы просто ставим статику доступ к основному методу вне класса.

Void - это возвращаемый тип, поскольку другой тип возвращаемого значения в основном методе не имеет смысла.

String - это предопределенное имя класса в java. А args [] - это переменная типов массивов. Его имя переменной типа String. Таким образом, мы также можем изменить имя args []. Класс String и его объект могут передаваться в запущенной программе в качестве аргумента для передачи информации основному методу из командной строки.

Ответ 4

Основной метод должен быть public, поэтому он может быть найден JVM при загрузке класса. Точно так же он должен быть static, так что он может быть вызван после загрузки класса без необходимости создания экземпляра его. Все методы должны иметь тип возврата, который в этом случае void.

Ответ 5

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

Этот пост дает хороший подробный ответ о аргументации для static: Почему основной метод Java статический?

Это сообщение дает хороший ответ, почему main недействителен: Почему main() в java void?

Ответ 6

Если нет, то почему это не жестко закодировано, что main (String arg []) будет стоять для public static void main (String arg []) всегда?

У вас могут быть методы под названием "main" с любой подписью и доступ к вам. Специальные правила применяются только к методу, который JVM должен вызвать для запуска программы.

public class Test {
  public static void main(String[] args) {
    StrangeMain m = new StrangeMain();
    System.out.println(m.main());
    System.out.println(m.main(new String[]{"aaa","bbb"}));
  }
}

class StrangeMain{
  protected String main(){
    return "xyzzy";
  }
  protected String main(String[] arg){
    return arg[0];
  }
}

компилирует, запускает и выводит:

xyzzy
aaa

Ответ 7

             Public static void main(String [] ar)

Чтобы понять это, нам нужно знать синтаксис метода и массива.

Синтаксис метода:

return type methodName

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

Синтаксис массива:

datatype [] arrayName

квадратные скобки указывают, является ли это размерным массивом. Поскольку у нас есть одна пара квадратных скобок, это один размерный массив.

Значение слов в основном методе:

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

Static: Static является модификатором. Основной метод должен быть объявлен как статический, так что JVM может напрямую обращаться к основному методу с помощью имени класса.

Когда мы выполняем java-программу, мы используем имя класса, поэтому, когда мы пишем static, это поможет JVM получить доступ к основному методу.

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

void: Void - это возвращаемый тип основного метода. Caller основного метода - JVM, а JVM не ожидает никакого значения из основного метода, и поэтому основной метод не должен возвращать какое-либо значение. Это является причиной указания Void.

main: Main - это имя метода и исправлено в соответствии с соглашениями Java.

String []: используется для хранения аргументов командной строки. Имя массива может быть любым допустимым идентификатором Java.

Итак, после String [] мы можем указать имя как любой действительный java-идентификатор, он может быть "ar" или может быть "args".

Ответ 8

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

Реальная реализация, которую мы имеем сегодня, просто использует интерфейс JNI для вызова метода public static void main (String args []) с помощью эту функцию, так что вы можете легко написать точно такой же код, если хотите использовать JNI и имеете другой способ загрузить ваше приложение.

Вот пример в коде, который был взят из this page.

Здесь текущая программа запуска linux, начинается поиск метода.

Ответ 9

  • Метод public-main() должен использоваться любым внешним классом, а также внутри класса, поэтому его общедоступный

  • static-static необходимо bcoz в java, если мы определяем класс, чем мы определяем объект для этого класса, и только тогда, когда мы можем использовать этот класс... но вместо этого мы непосредственно используем, записывая слово static

  • void-for main() не может возвращать любое значение типа int или char main() - main - это функция или метод, которые мы можем использовать для доступа к будущему java String-in java все, что мы пишем, рассматриваем как строку Args-аргументы