Методы играют важную роль в языке программирования Java, предоставляя возможность организации и структурирования кода. Более того, это один из наиважнейших инструментов по созданию чистоты в коде. Нужно, чтобы это были не джунгли, а подстриженный сад. В этой статье мы рассмотрим, что такое методы, как они работают и как их использовать в Java.
Метод и его структура
Метод в Java – это блок кода в классе, определяющий поведение объекта этого класса. В методе выполняется определённая операция (например, “сварить борщ” – это метод). Методы служат для выполнения конкретных задач и могут быть вызваны из других частей программы. По задумке они обеспечивают модульность и повторное использование кода. Ведь методы можно вызывать с разными настройками (параметрами).
Мы с вами уже сталкивались с методами. Но мы их писали не сами, а использовали готовые методы в классах String, Math и других. Например, Math.max() – это метод, и он позволяет из двух значений выбрать наибольшее.
Хотя на самом деле мы с вами каждый раз писали один-единственный метод на программу, и назывался он main(). Тот самый private static void main(String[] args). Это метод. Он выполняет определённую задачу: с него начинается программа. Именно в методе main() можно задавать, какие другие там уже вызывать методы.
Рассмотрим структуру метода. В ней есть определённые части, и от метода к методу они не меняют своего расположения и взаимного порядка.
Согласно соглашению о кодировании, методы в Java именуются с маленькой буквы, а затем каждое новое слово начинается с большой.
- Модификатор доступа: это ключевое слово, которое определяет доступность метода из других частей программы. В Java существуют четыре основных модификатора доступа:
- public: Метод доступен из любой части программы.
- private: Метод доступен только внутри класса, где он объявлен.
- protected: Метод доступен внутри класса и его подклассов.
- (отсутствие модификатора): Метод доступен внутри пакета (package-private), это модификатор доступа по умолчанию.
- Возвращаемый тип: это тип данных, который метод возвращает после своего выполнения, чтобы это значение можно было использовать там, откуда был вызван метод (например, метод для подсчёта суммы первых N чисел Фибоначчи должен возвращать числовое значение). В Java это может быть любой допустимый тип данных, например, int, double, String, boolean, и т.д. Если метод не возвращает значение, используется ключевое слово void (от английского – пустота).
- Название метода: название метода определяет его уникальность внутри класса, но что самое важное – позволяет вам и другим программистам, впоследствии читающим код, понимать, за что этот метод отвечает. Названия методов по правилу этикета содержат в себе глаголы и могут быть такими: calculateSum, printMessage, shutDown.
- Параметры метода: это переменные, которые метод принимает при вызове. Как бы настройки для метода. Они представлены внутри круглых скобок. Например, int first, int second в методе int calculateSum(int first, int second). Параметры передаются методу для выполнения операции. Они могут передаваться в метод различными способами. Важно понимать, как именно это происходит, чтобы не сесть в лужу.
- Тело метода: тело метода содержит набор инструкций, которые определяют, что делает метод. Это блок кода, заключенный в фигурные скобки {}. Внутри тела метода программист описывает логику выполнения операции.
- Строка с возвращением значения: внутри тела метода, если метод имеет возвращаемый тип (все, кроме void), используется оператор return для возврата значения. Например, return first + second; в методе int calculateSum(int first, int second) возвращает сумму чисел first и second. Оператор return завершает выполнение метода и передаёт результат туда, откуда метод вызвали.
Ещё вам может пригодиться такое понятие, как сигнатура метода. Сигнатура метода — это имя метода плюс параметры (причём порядок параметров имеет значение). В сигнатуру метода не входит возвращаемое значение.
Важная деталь: пока мы действуем в рамках метода main(), не создавая другие классы, каждому методу придётся дописывать ключевое слово static. Это слово означает, что нам необязательно создавать объект класса, чтобы использовать этот метод. Возможно, вам пока не совсем понятно, что за классы и объекты. Про них есть отдельная статья.
Методы без возвращаемого значения
Когда нужно создать метод, который просто выполняет какую-то операцию без возврата значения, используется тип void. Void – это пустота (с английского). Такой метод не возвращает значение.
Углубились в теорию – и хватит. Всё видно на примерах.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import java.util.Scanner; public class FirstProject { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Введите текст -> "); String text = scanner.nextLine(); printMessage(text); } private static void printMessage(String message) { System.out.println("----------------------------"); System.out.println("* " + message + " *"); System.out.println("----------------------------"); } } |
Посмотрите, что здесь только что произошло. Мы создали вне метода main() (но в классе FirstProject) приватный статический метод printMessage(). Этот метод из-за приватности доступен только изнутри класса FirstProject. Он принимает один параметр – строку message, которую выводит в консоль особым образом. И теперь, чтобы вывести таким образом сообщение, не нужно каждый раз писать эти три строки System.out.println(). Ведь можно вызывать одной строкой метод printMessage()! Разве не красиво?
В подтверждение своих слов переделаем пример, вызывая метод printMessage() аж три раза. Каждый из них – с новым значением параметра message.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import java.util.Scanner; public class FirstProject { public static void main(String[] args) { printMessage("Лицом к лицу лица не увидать"); printMessage("Большое видится на расстояньи"); printMessage("Когда кипит морская гладь..."); } private static void printMessage(String message) { System.out.println("----------------------------------"); System.out.println("* " + message + " *"); System.out.println("----------------------------------"); } } |
Отличный результат. Все три раза метод выполняет немного разные вещи. Конечно, он каждый раз выводит сообщения. Но сообщения меняются в зависимости от того, какой параметр будет передан. В этом и суть. Параметров может быть 0, 1, 2, 3 и так далее, но по этикету лучше стремиться к 0-2 параметрам в методе. Три в самом крайнем случае, а больше – преступление. Ведь избыточные параметры, откровенно сказать, нагружают метод и код в целом. Если вам нужно передать 4 параметра в метод, это означает, что программа спроектирована не лучшим образом.
Методы с возвращаемым значением
Часто методы используются не для того, чтобы просто сделать что-то. Чаще они нужны, чтобы рассчитать какое-то значение, собрать какой-нибудь объект и так далее. Для этого нужно научиться возвращать значение из метода.
Например: давайте напишем метод расчёта факториала числа и используем его несколько раз для разных параметров.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import java.util.Scanner; public class FirstProject { public static void main(String[] args) { for (int i = 1; i <= 8; i++) { System.out.println("Факториал числа " + i + ": " + calcFactorial(i)); } } private static long calcFactorial(int number) { int result = 1; for (int i = 2; i <= number; i++) { result *= i; } return result; } } |
В методе calcFactorial() прописана логика для расчёта факториала: домножать единицу на все числа от 2 до исходного числа. Вызывая метод calcFactorial() для чисел от 1 до 8, мы тестируем результат его выполнения. Этим результатом является возвращаемое значение типа long. Работает неплохо.
Перегрузка методов
В Java в рамках одного класса можно создавать несколько методов с одинаковыми именами, но с разными параметрами. Это называется перегрузкой методов. Такие методы могут выполнять разные действия.
Напишем программу, в которой будет помимо метода main() две перегрузки метода sum(). Первая перегрузка будет принимать 2 аргумента типа int, а вторая перегрузка – 3 таких аргумента.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public class FirstProject { public static void main(String[] args) { int number1 = 5; int number2 = 9; int number3 = 43; System.out.println(number1 + "+" + number2 + "=" + sum(number1, number2)); System.out.println(number3 + "+" + number3 + "=" + sum(number3, number3)); System.out.println(number1 + "+" + number2 + "+" + number3 + "=" + sum(number1, number2, number3)); } private static int sum(int first, int second) { return first + second; } private static int sum(int first, int second, int third) { return first + second + third; } } |
Чудесно. Суммы считаются правильно, среда разработки на методы с одинаковыми именами не жалуется. В общем, всё как надо. Конечно же, перегруженные методы могут отличаться не только количеством параметров одного типа, как показано здесь. Параметры могут отличаться разительно. Более того, параметров в одной из перегрузок может вообще не быть. Зависит от нужд решаемой задачи.
В этой статье мы рассмотрели основные концепции методов, такие как сигнатура, возвращаемый тип, параметры и перегрузка. Что самое важное, вдобавок мы рассмотрели примеры кода. Методы являются неотъемлемой частью программирования. Особенно важно для дальнейшего понимания своего кода писать лаконичные и чистые методы. Пишите методы и будьте счастливы!
Уведомление: Как делать запросы к API на Java с ПК