Java руководство для начинающих - Шилдт Герберт (2012)
-
Год:2012
-
Название:Java руководство для начинающих
-
Автор:
-
Жанр:
-
Оригинал:Английский
-
Язык:Русский
-
Издательство:Вильямс
-
Страниц:316
-
ISBN:978-5-8459-1770-6
-
Рейтинг:
-
Ваша оценка:
Java руководство для начинающих - Шилдт Герберт читать онлайн бесплатно полную версию книги
В приведенной выше программе обращает на себя внимание следующее. Во-первых, как пояснялось выше, обращение к аргументу v в методе vaTest () осуществляется как к массиву. Дело в том, что он действительно является массивом. Многоточие в объявлении этого метода указывает компилятору на использование переменного числа аргументов и на необходимость поместить их в массив v. Во-вторых, при обращении к методу vaTest () в методе main () указывается разное число аргументов, включая и вызов данного метода вообще без аргументов. Указываемые аргументы автоматически помещаются в массив v. Если же аргументы не указаны, длина этого массива будет равна нулю.
Помимо аргумента переменной длины, в методе можно также указывать и обычные аргументы, но при одном условии: аргумент переменной длины должен быть указан последним. Например, приведенное ниже объявление метода является вполне допустимым,
int dolt(int a, int b, double с, int ... vals) {
В данном случае первые три аргумента, передаваемые при вызове метода dolt (), будут соответствовать первым трем параметрам. А остальные аргументы будут считаться относящимися к параметру переменной длины vals.
Ниже приведен переработанный вариант метода vaTest (), в котором используются как обычные аргументы, так и аргументы переменной длины.
// Использование аргументов переменной длины
// вместе с обычными аргументами,
class VarArgs2 {
// Здесь msg - обычный аргумент,
// a v - аргумент переменной длины.
static void vaTest(String msg, int ... v) {
System.out.println(msg + v.length);
System.out.println("Contents: ") ;
for(int i=0; i < v.length; i++)
System.out.println(" arg " + i + ": " + v[i]);
System.out.println();
}
public static void main(String args[])
{
vaTest("One vararg: ", 10);
vaTest ("Three varargs: ", 1, 2, 3);
vaTest("No varargs: ");
}
}
Выполнение этого фрагмента кода дает следующий результат:
One vararg: 1
Contents:
arg 0: 10
Three varargs: 3
Contents:
arg 0: 1
arg 1: 2
arg 2: 3
No varargs: 0
Contents:
He следует, однако, забывать, что аргумент переменной длины должен быть указан последним. Например, следующее объявление метода недопустимо:
int dolt(int a, int b, double с, int ... vals,
boolean stopFlag) { // Ошибка!
В данном примере сделана попытка указать обычный аргумент после аргумента переменной длины.
Существует еще одно ограничение, которое следует соблюдать: аргументы переменной длины можно указать в методе только один раз. Например, приведенное ниже объявление метода составлено неверно.
int dolt(int a, int b, double с, int ... vals,
double ... morevals) { // Ошибка!
Ошибкой в данном случае является попытка указать два разных типа аргументов переменной длины.
Перегрузка методов с аргументами переменной длины
Если требуется, то метод, принимающий переменное число аргументов, можно перегрузить. Например, в следующей программе трижды перегружается метод vaTest ():
// Перегрузка метода с аргументами переменной длины,
class VarArgs3 {
// Первый вариант метода vaTest().
static void vaTest(int ... v) {
System.out.println("vaTest (int ...): " +
"Number of args: " + v.length);
System.out.println("Contents: ") ;
for(int i=0; i < v.length; i++)
System.out.println(" arg " + i + ": " + v[i]);
System.out.println();
}
// Второй вариант метода vaTest().
static void vaTest(boolean ... v) {
System.out.println("vaTest(boolean ...): " +
"Number of args: " + v.length);
System.out.println("Contents: ") ;
for(int i=0; i < v.length; i++)
System.out.println(" arg " + i + ": " + v[i]);