Для того чтобы использовать в программе собственный метод, его необходимо объявить. Общая форма объявления метода имеет следующий вид:
тип имя_метода (список параметров)
{
//тело метода
}
Описание метода может начинаться с модификаторов. При объявлении метода необходимо указать тип значения, которое будет возвращено после выполнения метода в программу. Тип может быть любым как примитивным, так и ссылочным. Если значение возвращать не нужно, то указывается ключевое слово void. Затем идет произвольный идентификатор – имя метода. После имени метода в круглых скобках указывается список параметров (он может быть и пустым). В списке параметров через запятую перечисляются тип и идентификатор каждого параметра. Далее в фигурных скобках записываются операторы, составляющие тело метода. Даже если метод не выполняет никаких действий и операторы отсутствуют, его тело все равно должно описываться парой пустых фигурных скобок. В теле метода не может бытьописан другой метод, так как в Java нет вложенных процедур и функций.
|
|
Параметры – это данные, которые нужно передать в метод, чтобы корректно выполнился его программный код. Например, метод, вычисляющий площадь круга, должен получить в качестве параметра радиус круга. А метод, который находит сумму элементов массива int[] a, больших некоторого целого числа b, должен получить одномерный массив и целое число. Заголовок такого метода может иметь следующий вид:
int summa(int[] a, int b)
{
//тело метода
}
Обратите внимание, что в отличие от объявления переменных, в списке параметров метода запрещается указывать несколько идентификаторов для одного типа:
void myMethod (double x, y) // неверная запись!
void myMethod (double x, double y)//верная запись
Кроме этого, в методе запрещены одноименные параметры и создание локальных переменных, имена, которых совпадают с именами параметров.
В классе можно описывать методы с одинаковыми именами, но разными параметрами. Такое дублирование методов называется перегрузкой (англ., overloading) и является возможным, потому что компилятор различает методы не по имени, а по сигнатуре.
Сигнатура (англ., signature) определяется именем метода и его параметрами: их количеством, типом и порядком следования. В классе запрещено создание двух методов с одинаковыми сигнатурами. Тип возвращаемого значения не входит в сигнатуру метода, значит, методы не могут различаться только типом результата их работы. Рассмотрим пример класса, содержащего методы с одинаковыми именами:
class Point
{
void get() {…}
void get(int x) {…}
void get(int x, double y) {…}
void get(double x, int y) {…}
}
Класс Point объявлен корректно. Все методы, хотя и имеют одинаковые имена, но различаются параметрами, а значит, имеют разную сигнатуру. Например, следующие пары методов несовместимы друг с другом в одном классе:
|
|
void get() {}
int get() {}
void get(int x) {}
double get(int y) {}
Методы отличаются типом возвращаемого значения, которое не входит в определение сигнатуры. Стало быть, данные пары методов с одинаковыми сигнатурами.
И последнее, если в заголовке метода указан тип возвращаемого значения, а не void, то в теле метода обязательно должен находиться оператор return, после которого через пробел указывается возвращаемое значение или выражение, совместимое по типу с типом возвращаемого значения.Оператор return прерывает работу метода и передает результат выполнения указанного выражения основной программе – в то место, откуда метод был вызван. В методе без возвращаемого значения (void) также можно использовать выражение return без каких либо аргументов. Его можно указать в любом месте метода, в этой точке выполнение метода будет завершено.
Используя рассмотренный выше синтаксис, попробуем в качестве примера создать метод для вычисления площади трапеции. При разработке собственного метода важно определить входные и выходные данные. Входные данные – это параметры метода. Выходные данные – это его возвращаемое значение.
Как известно, площадь трапеции равна произведению полусуммы ее оснований на высоту: . Входными данными для рассматриваемого метода будут, очевидно, длины двух оснований и высота трапеции. Выходные данные (результат) – вещественное число, представляющее собой площадь трапеции.
Следует отметить, что в объектно-ориентированной концепции методы могут получать данные для работы, обращаясь к атрибутам своего класса, а результат их работы может заключаться в изменении этих атрибутов. Мы несколько отойдем от объектно-ориентированной парадигмы и на данном этапе изучения языка Java, будем рассматривать методы как классические функции – подпрограммы.
Простейший вариант метода будет выглядеть следующим образом:
double areaTrapezoid (double a, double b, double h)
{return h*((a+b)/2);}
Создадим класс MyClass и добавим в него описание метода areaTrapezoid(). Данный класс является исполняемой программой, поэтому в нем будет находиться еще и метод main(), из которого при запуске программы нужно будет вызвать метод areaTrapezoid(). Для того, чтобы такой вызов был возможным, добавим в заголовке метода areaTrapezoid() модификатор static (он будет изучен нами позднее). Описание метода areaTrapezoid()должно находиться внутри класса, но не внутри метода main(), а на одном уровне с ним:
class MyClass {
static double areaTrapezoid (double a, double b, double h)
{return h*((a+b)/2);}
public static void main(String[] args)
{ // вызов метода areaTrapezoid()
}}
В результате класс MyClass содержит два метода: main(), выполняющийся при запуске программы и areaTrapezoid(), который необходимо вызвать.