Чтение онлайн

на главную - закладки

Жанры

Java: руководство для начинающих
Шрифт:

Организовать немедленное завершение метода типа void и возврат из него можно с помощью следующей формы оператора return: return ;

При выполнении этого оператора управление будет возвращено вызывающей части программы, а оставшийся в методе код будет проигнорирован. Рассмотрим в качестве примера следующий метод: void myMeth { int i; for(i=0; i<10; i++) { if(i == 5) return; // завершить цикл на значении 5 System.out.println; } }

Здесь переменная цикла for принимает лишь значения от 0 до 5. Как только значение переменной i становится равным 5, цикл завершается и происходит возврат из метода. В одном методе допускается несколько операторов return. Необходимость в них возникает в том случае, если в методе организовано несколько

ветвей выполнения, как в приведенном ниже примере, void myMeth { // ... if(done) return; // ... if(error) return; // ... }

В данном примере метод возвращает управление вызывающей части программы либо по завершении всех необходимых действий, либо при появлении ошибки. Применяя операторы return, следует соблюдать осторожность: слишком большое количество точек возврата из метода нарушает структуру кода. В грамотно написанном методе точки возврата четко определены.

Итак, метод типа void может быть завершен одним из двух способов: по достижении закрывающей фигурной скобки тела метода или при выполнении оператора return. Возврат значения

Несмотря на то что методы типа void встречаются довольно часто, большинство методов все же возвращают значения. Способность возвращать значение относится к одним из самых полезных свойств метода. Пример возврата значения уже встречался ранее в этой книге, когда для вычисления квадратного корня использовался метод sqrt .

В программировании возвращаемые значения применяются для самых разных целей. В одних случаях, как, например, при обращении к методу sqrt , возвращаемое значение представляет собой результат некоторых расчетов. А в других случаях это значение лишь сообщает, успешно ли были выполнены действия, предусмотренные в методе. При этом возвращаемое значение нередко содержит код состояния. Независимо от конкретного способа применения, возвращаемые значения являются неотъемлемой частью программирования на Java.

Методы возвращают значения вызывающей части программы, используя следующую форму оператора return: return значение;

где значение — конкретное возвращаемое значение. Данная форма оператора return может быть использована только в тех методах, тип которых отличается от типа void. Более того, подобные методы обязаны возвращать значение, используя данную форму оператора return.

Теперь мы можем немного видоизменить метод range с учетом возвращаемых значений. Вместо того чтобы отображать дальность в методе range , лучше ограничиться ее расчетом и возвратом полученного значения. Преимущество такого подхода заключается, в частности, в том, что возвращаемое значение может быть использовано при выполнении других расчетов. В приведенном ниже примере метод range видоизменен, возвращая значение, которое затем выводится на экран. // Использование возвращаемого значения, class Vehicle { int passengers; // количество пассажиров int fuelcap; // емкость топливного бака int mpg; // потребление топлива в милях на галлон // Возврат дальности действия для заданного транспортного средства. int range { return mpg * fuelcap; } } class RetMeth { public static void main(String args[]) { Vehicle minivan = new Vehicle; Vehicle sportscar = new Vehicle; int rangel, range2; // присвоить значения полям в объекте minivan minivan.passengers = 7; minivan.fuelcap = 16; minivan.mpg = 21; // присвоить значения полям в объекте sportscar sportscar.passengers = 2; sportscar.fuelcap = 14; sportscar.mpg = 12; // получить дальности действия разных транспортных средств // Возвращаемое методом значение присваивается переменной. rangel = minivan.range ; range2 = sportscar.range; System.out.println("Minivan can carry " + minivan.passengers + " with range of " + rangel + " Miles"); System.out.println("Sportscar can carry " + sportscar.passengers + " with range of " + range2 + " miles"); } }

Ниже приведен результат выполнения данной программы. Minivan can carry 7 with range of 336 Miles Sportscar can carry 2 with range of 168 miles

Обратите

внимание на то, что вызов метода range в данной программе указывается в правой части оператора присваивания, тогда как в левой его части — переменная, которая принимает значение, возвращаемое методом range . Таким образом, после выполнения следующей строки кода значение дальности действия для объекта minivan сохраняется в переменной rangel: rangel = minivan.range;.

Следует иметь в виду, что в данном случае метод range возвращает значение типа int, т.е. вызывающая часть программы получает целочисленное значение. Тип возвращаемого значения — очень важная характеристика метода, поскольку возвращаемые данные должны соответствовать типу, указанному в определении метода. Иными словами, если метод должен возвращать значение типа double, то именно таким и следует объявить его тип.

Несмотря на то что приведенная выше программа компилируется и выполняется без ошибок, ее эффективность можно повысить. В частности, переменные rangel и range2 в ней не нужны. Вызов метода range можно непосредственно указать в качестве параметра метода println , как показано ниже. System.out.println("Minivan can carry " + minivan.passengers + " with range of " + minivan.range + " Miles");

В данном случае при выполнении метода println будет автоматически осуществляться вызов minivan. range , а полученное в итоге значение — передаваться методу println . Более того, к методу range можно обратиться в любой момент, когда понадобится значение дальности действия для объекта типа Vehicle. В качестве примера ниже приведено выражение, в котором сравнивается дальность действия двух транспортных средств. if(vl.range > v2.range) System.out.println("vl has greater range"); Использование параметров

При вызове метода ему можно передать одно или несколько значений. Значение, передаваемое методу, называется аргументом. А переменная, получающая аргумент, называется формальным параметром, или просто параметром. Параметры объявляются в скобках после имени метода. Синтаксис объявления параметров такой же, как и у переменных. А областью действия параметров является тело метода. За исключением особых случаев передачи аргументов методу параметры действуют так же, как и любые другие переменные.

Ниже приведен простой пример программы, демонстрирующий использование параметров. В классе ChkNum метод isEven возвращает логическое значение true, если значение, передаваемое при вызове этого метода, является четным числом. В противном случае метод возвращает логическое значение false. Таким образом, метод isEven возвращает значение типа boolean. // Простой пример применения параметра в методе. class ChkNum { // возвратить логическое значение true, // если х содержит четное число // Здесь х — целочисленный параметр метода isEven. boolean isEven(int x) { if((x%2) == 0) return true; else return false; } } class ParmDemo { public static void main(String args[]) { ChkNum e = new ChkNum; // В следующих строках кода передаются аргументы методу isEven. if(е.isEven(10)) System.out.println("10 is even."); if (e.isEven(9)) System.out.println("9 is even."); if (e.isEven(8)) System.out.println("8 is even."); } }

Выполнение этой программы дает следующий результат: 10 is even. 8 is even.

В данной программе метод isEven вызывается трижды, и каждый раз ему передается новое значение. Рассмотрим подробнее ее исходный код. Обратите сначала внимание на то, каким образом вызывается метод isEven . Его параметр указывается в круглых скобках. При первом вызове методу isEven передается значение 10. Следовательно, когда метод isEven начинает выполняться, параметр х получает значение 10. При втором вызове в качестве аргумента этому методу передается значение 9, которое и принимает параметр х. А при третьем вызове методу isEven передается значение 8, которое опять же присваивается параметру х. Какое бы значение ни указать при вызове метода isEven , его все равно получит параметр х.

Поделиться:
Популярные книги

Геном хищника. Книга девятая

Гарцевич Евгений Александрович
9. Я - Легенда!
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Геном хищника. Книга девятая

Чужое наследие

Кораблев Родион
3. Другая сторона
Фантастика:
боевая фантастика
8.47
рейтинг книги
Чужое наследие

Петля, Кадетский Корпус. Книга четвертая

Алексеев Евгений Артемович
4. Петля
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Петля, Кадетский Корпус. Книга четвертая

Дворянин

Злотников Роман Валерьевич
2. Император и трубочист
Фантастика:
боевая фантастика
альтернативная история
5.00
рейтинг книги
Дворянин

Я князь. Книга XVIII

Дрейк Сириус
18. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я князь. Книга XVIII

Каратила

Поповский Андрей Владимирович
Детективы:
боевики
6.50
рейтинг книги
Каратила

Газлайтер. Том 21

Володин Григорий Григорьевич
21. История Телепата
Фантастика:
боевая фантастика
аниме
попаданцы
5.00
рейтинг книги
Газлайтер. Том 21

Сильнейший Столп Империи. Книга 4

Ермоленков Алексей
4. Сильнейший Столп Империи
Фантастика:
фэнтези
аниме
фантастика: прочее
попаданцы
5.00
рейтинг книги
Сильнейший Столп Империи. Книга 4

Гримуар темного лорда VII

Грехов Тимофей
7. Гримуар темного лорда
Фантастика:
боевая фантастика
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Гримуар темного лорда VII

Идеальный мир для Лекаря 2

Сапфир Олег
2. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 2

Изгой Проклятого Клана

Пламенев Владимир
1. Изгой
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Изгой Проклятого Клана

Глубокий космос

Вайс Александр
9. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Глубокий космос

Я не бог. Книга XXXIV

Дрейк Сириус
34. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я не бог. Книга XXXIV

Гнев Пламенных

Дмитриева Ольга Олеговна
5. Пламенная
Фантастика:
фэнтези
4.80
рейтинг книги
Гнев Пламенных