Использование аргументов командной строки
Использование аргументов командной строки Иногда будет требоваться передать определенную информацию программе во время ее запуска. Для этого используют аргументы командной строки метода main(). Аргумент командной строки – это информация, которую во время запуска программы задают в командной строке непосредственно после ее имени. Доступ к аргументам командной строки внутри Java-программы не представляет сложности – они хранятся в виде строк в массиве String, переданного методу main(). Первый аргумент командной строки хранится в элементе массива args[0], второй – в элементе args[0] и т. д. Например, следующая программа отображает все аргументы командной строки, с которыми она вызывается. // Отображение всех аргументов командной строки. class CommandLine { public static void main(String args[]) { for(int i=0; i< args. length; i++) System. out. println(" args[" + i + " ]: " + args[i]); } } Попытайтесь выполнить эту программу, введя следующую строку: · java CommandLine this is a test 100 -1 В результате отобразится следующий вывод: args[0]: this args[1]: is args[2]: a args[3]: test args[4]: 100 args[5]: -1 Все аргументы командной строки передаются как строки. Численные значения нужно вручную преобразовать в их внутренние представления. Аргументы переменной длины В JDK 5 была добавлена новая функциональная возможность, которая упрощает создание методов, принимающих переменное количество аргументов. Эта функциональная возможность получила название varargs (сокращение термина variable-length arguments – аргументы переменной длины). Метод, который принимает переменное число аргументов, называют методом переменной арности, или просто методом varargs. Ситуации, в которых методу нужно передавать переменное количество аргументов, встречаются не так уж редко. Например, метод, который открывает подключение к Internet, может принимать имя пользователя, пароль, имя файла, протокол и тому подобное, но применять значения, заданные по умолчанию, если какие-либо из этих сведений опущены. В этой ситуации было бы удобно передавать только те аргументы, для которых заданные по умолчанию значения не применимы. Еще один пример – метод printf(), входящий в состав библиотеки ввода-вывода Java.
// Использование массива для передачи методу переменного // количества аргументов. Это старый стиль подхода // к обработке аргументов переменной длины. class PassArray { static void vaTest(int v[]) { System. out. print(" Количество аргументов: " + v. length + " Содержимое: " ); for(int x: v) System. out. print(x + " " ); System. out. println(); } public static void main(String args[]) { // Обратите внимание на способ создания массива // для хранения аргументов. int n1[] = { 10 }; int n2[] = { 1, 2, 3 }; int n3[] = { }; vaTest(n1); // 1 аргумент vaTest(n2); // 3 аргумента vaTest(n3); // без аргументов } } Эта программа создает следующий вывод: Количество аргументов: 1 Содержимое: 10 Количество аргументов: 3 Содержимое: 1 2 3 Количество аргументов: 0 Содержимое: В программе методу vaTest() аргументы передаются через массив v. Этот старый подход к обработке аргументов переменной длины позволяет методу vaTest() принимать любое число аргументов. Однако он требует, чтобы эти аргументы были вручную помещены в массив до вызова метода vaTest(). Создание массива при каждом вызове метода vaTest() не только трудоемкая, но и чреватая ошибками задача. Функциональная возможность использования методов varargs обеспечивает более простой и эффективный подход. Для указания аргумента переменной длины используют три точки (... ). Например, вот как метод vaTest() можно записать с использованием аргумента переменной длины: static void vaTest(int... v) { Эта синтаксическая конструкция указывает компилятору, что метод vaTest() может вызываться с нулем или более аргументов. В результате v неявно объявляется как массив типа int[]. Таким образом, внутри метода vaTest() доступ к v осуществляется с использованием синтаксиса обычного массива. Предыдущая программа с применением метода vararg приобретает следующий вид:
// Демонстрация использования аргументов переменной длины. class VarArgs { // теперь vaTest() использует аргументы переменной длины. static void vaTest(int... v) { System. out. print(" Количество аргументов: " + v. length + " Содержимое: " ); For(int x: v) System. out. print(x + " " ); System. out. println(); } public static void main(String args[]) { // Обратите внимание на возможные способы вызова // vaTest() с переменным числом аргументов. vaTest(10); // 1 аргумент vaTest(1, 2, 3); // 3 аргумента vaTest(); // без аргументов } } Вывод этой программы совпадает с выводом исходной версии. Наряду с параметром переменной длины массив может содержать “нормальные” параметры. Однако параметр переменной длины должен быть последним параметром, объявленным методом. Существует еще одно ограничение, о котором следует знать: метод должен содержать только одни параметр типа varargs. Метод, который принимает аргумент переменной длины, можно перегружать. // Параметры vararg и перегрузка. class VarArgs3 { static void vaTest(int... v) { System. out. print(" vaTest(int... ): " + " Количество аргументов: " + v. length + " Содержимое: " ); for(int x: v) System. out. print(x + " " ); System. out. println(); } static void vaTest(boolean... v) { System. out. print(" vaTest(boolean... ) " + " Количество аргументов: " + v. length + " Содержимое: " ); for(boolean x: v) System. out. print(x + " " ); System. out. println(); } static void vaTest(String msg, int... v) { System. out. print(" vaTest(String, int... ): " + msg + v. length + " Содержимое: " ); for(int x: v) System. out. print(x + " " ); System. out. println(); } public static void main(String args[]) { vaTest(1, 2, 3); vaTest(" Проверка: ", 10, 20); vaTest(true, false, false); } } Эта программа создает следующий вывод: vaTest(int... ): Количество аргументов: 3 Содержимое: 1 2 3 vaTest(String, int... ): Проверка: 2 Содержимое: 10 20 vaTest(boolean... ) Количество аргументов: 3 Содержимое: true false false
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|