Запуск программ Java и обработка аргументов командной строки
Чтобы запустить Java программу следует указать имя класса Java в командной строке. Например, допустим, имеется такой класс:
public class MyProgram {
...
// Точка входа в мою программу.
public static void main(String[] args) {
... // Код моей программы.
}
}
(Этот код должен храниться в файле MyProgram.java, и компилироваться по команде
java MyProgram 1234 www.caltech.edu "olive festival"
Для запуска этого Java кода, надо вызвать виртуальную машину (Java Virtual Machine/JVM) с командой:
java MyProgram
JVM загрузит MyProgram.class, и начнет исполнение вашей программы, начиная с метода main. Это точка входа в программу.
Метод main должен быть объявлен по определенным правилам, для того чтобы JVM смогла отличить его от других методов класса. Он должен иметь модификаторы public и static,иметь один аргумент типа String[] и не возвращать значения (void). Если в классе метод main в точности соответствующий этому описанию, при попытке запуска программы вам вернется сообщение об ошибке:
java MyProgram
Exception in thread "main" java.lang.NoSuchMethodError: main
Если вы видите такую ошибку, проверьте правильно ли вы объявили в тексте программы метод main. В нашем примере все сделано правильно.
Аргументы командной строки
Часто, в программе требуется обработать аргументы, указанные в командной строке. Например, программу можно запустить так:
java MyProgram 1234 www.caltech.edu "olive festival"
Программе нужно как то получить доступ к значениям указанным в командной строке. Это можно сделать через аргумент типа String[], который передается методу main. Заметим, что это массив строк. Каждый элемент в массиве содержит одно из значений указанных в командной строке.
Для приведенного выше примера, массив args будет содержать следующие значения:
args.length = 3 args[0] = "1234" args[1] = "www.caltech.edu" args[2] = "olive festival"
Аргументы Java программы разделяются пробелами или символами табуляции, кроме случая, кода они заключены в двойные кавычки. В нашем примере, первые два аргумента: "1234" и "www.caltech.edu", так как Java VM разделяет их, с помощью пробела. Третий аргумент, "olive festival", не разбивается на отельные аргументы, так как он заключен в двойные кавычки.
Учтите, что пробелы, расположенные между аргументами, а также в начале и конце списка аргументов, удаляются и не присутствуют в массиве args. В массив также не попадают двойные кавычки, в которые заключены аргументы.
(Если вы программировали на C или C++, вы должны заметить разницу между тем как аргументы передаются программам на C и C++, и как они передаются программам на языке Java. В C и C++, первый элемент массива argv[0] это имя самой программы, а argv[1] первый аргумент командной строки программы. В Java, args[0] это первый аргумент командной строки программы а имя программы отсутствует в аргументах.)
Числа в командной строке
Если программа на языке Java получает числовые параметры через командную строку, она должна явно преобразовать строковое представление числа в значение числового типа. Вернемся к нашему примеру. В командной строке, первый аргумент "1234", имеет тип String. Его требуется преобразовать в целое число. Для выполнения таких преобразований используют класса из пакета java.lang . Например, для преобразования args[0] в целое число, можно сделать так:
public static void main(String[] args) {
int num = 0;
...
try {
// Преобразовать строку в целое.
num = Integer.parseInt(args[0]);
}
catch (NumberFormatException nfe) {
// Первый аргумент командной строки не целое число. Выводим
// сообщение об ошибке и завершаем работу.
System.out.println("Первый аргумент должен быть целым числом.");
System.exit(1);
}
... // Код использующий значения аргументов командной строки.
}
К этому коду есть несколько важных замечаний:
Переменная должна быть объявлена перед блоком try/catch потому что она используется после того как блок завершит работу; если объявить ее внутри блока, она будет доступна только внутри блока.
Переменная должна быть проинициализирована перед блоком try/catch потому что, если этого не сделать, компилятор Java выдаст сообщение о "не инициализированной переменной " во время компиляции.
Ниже приведен не полных список примитивных типов данных и функций которые можно использовать для преобразования аргументов командной строки. Эти классы находятся в пакете java.lang, и следовательно доступны без добавления каких либо директив import к программе. Функции преобразования статические и это значит, что вам не надо создавать какие либо новые объекты, прежде чем вызывать эти функции.
|
Примитивный тип данных |
Функция преобразования |
|
boolean |
|
|
Int |
|
|
Long |
|
|
float |
|
|
double |