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

Могу ли я вызвать из командной строки java-метод, отличный от main (String [])?

Могу ли я вызвать из командной строки метод java, отличный от main(String[])?

4b9b3361

Ответ 1

Если вы устанавливаете REPL для JVM-языка (Groovy, вероятно, требуется наименьшая работа для начала работы), вы можете вызвать методы Java в приглашении REPL (Groovy называется groovysh). groovysh имеет некоторые нечетные функции (мой младший бит - это то, что объявление переменных с помощью def не делает то, что вы считаете необходимым), но оно по-прежнему очень полезно. Это интересная функция, которая Groovy не учитывает конфиденциальность, поэтому вы можете вызывать частные методы и проверять содержимое частных переменных.

Groovy установки включают groovysh. Загрузите zip файл, извлеките его где-нибудь, добавьте расположение каталога bin в путь, и вы хорошо пойдете. Вы можете удалить банки в папку lib, для кода, который вы используете, и библиотеки, используемые этим кодом, и Groovy найдет их там.

Ответ 2

Если у вас нет основной функции, вы можете просто добавить ее, и если вы это сделаете, вы можете просто добавить серию if-then блоков в начало.

public static void main(String[] args){
    if (args[0].equals("MY_METHOD"))
        callMyMethod();
    else if(args[0].equals("MY_OTHER_METHOD"))
        callMyOtherMethod();
    //... Repeat ad nauseum...
    else {
        //Do other main stuff, or print error message
    }
}

Затем из командной строки:

$ java [MyPackage.]MyClass MY_METHOD

Запустит ваш метод.

Это довольно хаки - я почти уверен, что это не то, что вы хотите сделать, но эй, он отвечает на вопрос, верно?

Ответ 3

Вот функция bash, которая позволяет сделать именно это:

function javae {
  TDIR=`mktemp -d`
  echo "public class Exec { public static void main(String[] args) throws Exception { " $1 "; } }" > $TDIR/Exec.java && javac $TDIR/Exec.java && java -cp $CLASSPATH:$TDIR Exec;
  rm -r $TDIR;
}

Поместите это в ~/.bashrc, и вы можете сделать это:

javae 'System.out.println(5)'

Или это:

javae 'class z { public void run() { System.out.println("hi"); } }; (new z()).run()'

Это взломать конечно, но он работает.

Ответ 4

Вы не можете вызывать даже основной метод из этой команды. JVM вызывает основной метод. Это просто конвенция. Это всегда должно быть "public static void main".

Каков ваш прецедент?

Ответ 5

Нет, вы не можете

В соответствии с часто задаваемыми вопросами по командной строке Java (который сейчас мертв.) Вы можете проверить FAQ по Java Threads

Метод точки входа main() используется для обеспечения стандартного соглашения для запуска программ Java. Выбор имени метода несколько произвольный, но он частично разработан, чтобы, например, избежать конфликтов с методами Thread start() и Runnable run().

Проверьте FAQ. Вы получите хорошие знания о командной строке JAVA

Ответ 6

Из Спецификация виртуальной машины Java

Виртуальная машина Java запускается путем создания начального класса, который указывается в зависимости от реализации, используя bootstrap class loader (§5.3.1). Виртуальная машина Java затем связывает начальный класс, инициализирует его и вызывает его метод открытого класса void main (String []). Вызов этого метода приводит все выполнение. Выполнение инструкций виртуальной машины Java составляющий основной метод, может привести к связыванию (и, следовательно, создание) дополнительных классов и интерфейсов, а также вызов дополнительных методов.

Таким образом, основная функция является специальной.

Ответ 7

Нет, я так не думаю. main() - это точка входа. Это определяется языком. Вы можете обернуть script вокруг вызова main() ( "java MyApp arg1... argn" ), конечно, чтобы скрыть имя (и даже скрыть, что вы используете Java), и предоставить свой собственный синтаксис параметров и синтаксический анализ - это возможность, предоставляемая ОС, конечно, с помощью какого-то языка сценариев командной строки.

Если вы используете Java для создания других типов исполняемых файлов, таких как апплеты или приложения GWT, тогда точка входа отличается, но я думаю, что вы конкретно думаете о том, что исполняемые файлы запускаются из командной строки.

Ответ 8

Нет, это невозможно.

Пожалуйста, ознакомьтесь со спецификацией языка Java

http://java.sun.com/docs/books/jls/second_edition/html/execution.doc.html

Конечно, апплеты и сервлеты и другие технологии могут иметь разные отправные точки.