Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Гостевая книга ... 65535
Содержание сайт... 65535
Вызов хранимых ... 65535
Эмулятор микроп... 65535
Бип из системно... 59924
Invision Power ... 58205
Организация зап... 58120
Модуль Forms 56853
Приложение «Про... 56045
Создание отчето... 55668
Оператор выбора... 55533
Подключение Mic... 55387
ТЕХНОЛОГИИ ДОСТ... 51781
Программируемая... 48865
Пример работы с... 47630
Имитационное мо... 47406
21 ошибка прогр... 42391
Реклама
Сейчас на сайте
Гостей: 7
На сайте нет зарегистрированных пользователей

Пользователей: 13,012
новичок: Scam
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Программа тестирования (тест) - вступительные экзамены (математика, физи...
Моделирование интернет кафе на GPSS + Отчет
Моделирование регулировочного участка цеха на GPSS + Пояснительная записка

Реклама

Аргументы переменной длины. Средство формирования списка с переменным числом аргументов
До выхода версии Java 2 5.0 переменное количество аргументов обрабатывалось двумя способами, ни один из которых нельзя назвать удобным. Во-первых, если максимальное число аргументов не велико и известно, можно было создать перегружаемые версии метода, по одной на каждый вариант списка передаваемых в метод аргументов. Хотя этот способ работает и подходит для некоторых случаев, он применим лишь к узкому классу задач.
Если максимальное количество аргументов было велико или неизвестно, применялся второй способ: аргументы помещались в массив, и этот массив передавался методу. Этот подход иллюстрирует программа, приведенная в листинге 5.1.

Листинг 5.1. Применение массива для передачи разного количества аргументов методу

// Use an array to pass a variable number of
// arguments to a method. This is the old-style
// approach to variable-length arguments.
class PassArray {
static void vaTest(int v[]) {
System.out.print("Number of args: " + v.length +
" Contents: ");

for(int x : v)
System.out.print(x + " ");

System.out.println();
}

public static void main(String args[])
{
// Notice how an array must be created to
// hold the arguments.
int n1[] = { 10 };
int n2[] = { 1, 2, 3 };
int n3[] = { };

vaTest(n1); // 1 arg
vaTest(n2); // 3 args
vaTest(n3); // no args
}
}



Далее приведен вывод результатов работы программы из листинга 5.1:
Number of args: 1 Contents: 10
Number of args: 3Contents: 1 2 3
Number of args: 0 Contents:



В листинге 5.1 методу vaTest() аргументы передаются в массиве v. Этот устаревший подход, тем не менее, позволяет методу vaTest() принимать произвольное число аргументов. Но при этом необходимо вручную упаковать аргументы в массив перед вызовом метода vaTest(). Кроме того, что формировать массив для каждого вызова vaTest() утомительно, это действие может быть источником ошибок. Новое средство создания списков с произвольным количеством аргументов предлагает более простой и удобный способ.
Аргумент переменной длины (содержащий переменное число аргументов) задается тремя точками (...). В следующей строке приведен пример описания метода vaTest(), использующего аргумент переменной длины:
static void vaTest (int...v) {
Эта синтаксическая запись сообщает компилятору, что vaTest() может вызываться без параметров, с одним или несколькими параметрами. В результате переменная v, аргумент переменной длины, неявно объявляется массивом типа int[ ]. Таким образом, в теле метода vaTest() для доступа к v используется нормальный синтаксис работы с массивом. В листинге 5.2 приведен вариант программы из листинга 5.1, но с применением средства формирования списка с переменным числом аргументов.
Листинг 5.2. Демонстрация средства формирования списка с переменным числом элементов
// vaTest() now uses a vararg.
static void vaTest(int ... v) {
System.out.print("Number of args: " + v.length +
" Contents: ");

for(int x : v)
System.out.print(x + " ");

System.out.println();
}

public static void main(String args[])
{

// Notice how vaTest() can be called with a
// variable number of arguments.
vaTest(10); // 1 arg
vaTest(1, 2, 3); // 3 args
vaTest(); // no args
}
}



Вывод у программы из листинга 5.2 такой же, как у примера из листинга 5.1.
В приведенной программе следует обратить внимание на два момента. Во-первых, как уже упоминалось, внутри метода vaTest() аргумент переменной длины, v, обрабатывается как массив, потому что v и есть массив. Символьная комбинация ... сообщает компилятору о том, что будет использоваться переменное число аргументов, и что эти аргументы будут храниться в массиве, ссылка на который содержится в переменной v. Во-вторых, в методе main() метод vaTest() вызывается с разным числом аргументов, включая полное их отсутствие. Аргументы автоматически помещаются в массив и передаются переменной v. В случае отсутствия аргументов длина массива равна 0.
В список параметров метода могут быть включены "обычные" (обязательно указываемые при вызове метода) параметры наряду параметром переменной длины. При этом параметр, содержащий переменное число аргументов, должен быть последним в списке параметров метода. В следующей строке приведен пример корректного объявления такого метода:
int doIt (int a, int b, double с, int...vals) {
В приведенном примере первые три аргумента, используемые при вызове метода doIt (), соответствуют первым трем параметрам. Любые оставшиеся аргументы будут передаваться в переменной vals.
Запомните: параметр переменной длины (т. е. содержащий произвольное число аргументов) должен быть последним в списке параметров метода. В следующей строке приведен пример некорректного объявления:
Int doIt (int a, int b, double c,int-vals,Boolean stopFlag){//Ошибка!
В приведенной строке делается попытка объявить обычный параметр после параметра переменной длины, что недопустимо.
Следует знать еще об одном ограничении: в списке параметров метода может быть только один параметр переменной длины. В следующей строке тоже приведено неправильное объявление:
int doIt {int a, int b, double с, int…vals, double…morevals) { // Ошибка!
Попытка указать второй параметр переменной длины также недопустима.
В листинге 5.3 приведена переработанная версия метода vaTest(), которая принимает обычный аргумент и аргумент переменной длины.

Листинг 5.3. Использование аргумента переменной длины и обычного аргумента

class VarArgs2 {

// Here, msg is a normal parameter and v is a
// varargs parameter.
static void vaTest(String msg, int ... v) {
System.out.print(msg + v.length +
" Contents: ");

for(int x : v)
System.out.print(x + " ");

System.out.println();
}

public static void main(String args[])
{
vaTest("One vararg: ", 10);
vaTest("Three varargs: ", 1, 2, 3);
vaTest("No varargs: ");
}
}



Далее приведен вывод результатов работы программы из листинга 5.3:
One vararg: I Contents: 10
Three varargs: 3 Contents: 1 2 3
No varargs: 0 contents:



Опубликовал Kest January 13 2009 13:13:08 · 0 Комментариев · 10299 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере!
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Книга по Delphi (...
Мониторинг сервер...
SMExport
Пример клиента ФТ...
Самоучитель PHP 5...
Создание фракталов
Sztransppanel
PBEditPack
MPTools
Библия хакера 2 К...
Delphi 2005 для W...
TsHintManager
База Allsubmitter...
Image Browser [Ис...
Отключение и вклю...
PHP/MySQL для нач...
Cooltray
Стелтинг Стивен, ...
Java 2. Наиболее ...
Профессиональное ...

Топ загрузок
Приложение Клие... 100289
Delphi 7 Enterp... 76679
Converter AMR<-... 20017
Borland C++Buil... 10589
GPSS World Stud... 9047
Borland Delphi ... 7572
Turbo Pascal fo... 6874
Visual Studio 2... 4889
Калькулятор [Ис... 3914
FreeSMS v1.3.1 3482
Случайные статьи
Консоль разработчика
Резюме
Отношения между уч...
Хотя компьютеры, в...
Разработка любител...
Игровые автоматы В...
Проверьте режим пе...
ЭЛЕМЕНТЫ ПРОЦЕДУРЫ...
Программа Очистка ...
Режим перевода кад...
Как копировать лис...
Настройка фотоаппа...
тег структуры
Оказывается, деньг...
Целые числа: удиви...
Too many symbols
Технология Android...
______ * "*РезюмеР...
Настройка плагина ...
Предложенный шабло...
Компоновка данных ...
Обход дерева
Получи www.anythin...
Что нужно для отпр...
файлов
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?