Функции в Java
Last updated: 3 мая 2025 г.В этом уроке мы познакомимся с понятием функций, которые в Java все же корректнее называть методами. Несмотря на это, термин “функция” широко используется и в Java, поэтому для удобства будем придерживаться именно его.
До этого мы уже употребляли некоторые функции — например, println()
для вывода строки в консоль или replace()
для замены символов в строке и т.д.
Говоря просто, функция — это единица кода, которая выполняет определенное действие над переданными ей данными.
Важно понимать, что все процессы, которые выполняют это действие (то есть код, который реализует процессы выполняющие это действие) скрыты от наших глаз — они происходят “за кулисами”.
То есть в программе мы просто написали название функции, передав ей какие-либо аргументы (аргументы это то, что передается функции в круглых скобочках () ) и она выполняет то или иное действие.
И эту функцию можно таким образом вызывать много раз по ходу программы.
К примеру, представьте, что мы вызвали функцию equals много раз по ходу программы.
А теперь представьте если бы для сравнения двух строк на каждом месте где вызывается эта функция мы бы писали не вызов equals, а то, что внутри equals, то есть код, который реализует процессы сравнения двух строк и собственно выполняет сравнение двух строк, то есть код, который под капотом у equals, а этот код это не одна строчка кода, и очевидно, что на каждом месте где у нас раньше был вызов equals, эти строчки кода из equals будут повторяться. Что очевидно не есть хорошо. Вызов функции это одна строчка кода, а то что у нее под капотом это много строчек кода. Лучше повторять одну строчку кода, чем повторять много строчек кода.
И здесь очевиден смысл функций!!
Вынося код в функцию, а не многократно повторяя его по ходу программы мы уменьшаем количество повторяющегося кода, что ясное дело делает его намного читабельнее.
Более наглядно на примере программы:
1class Test
2{
3 public static void main(String []args)
4 {
5 String b = "Some text info!";
6 String c = "Some text info!";
7 String d = "Some text inrwgf!";
8 if(b.equals(c)) { //Если бы здесь,
9 System.out.println("b and c are equal strings!");
10 }
11 System.out.println(b.equals(c));// здесь,
12 System.out.println(c.equals(d));// и здесь,
13 //для сравнения строк вместо вызова equals был бы
14 //код, который под капотом у функции equals
15 //то очевидно было бы много повторяющегося кода кода.
16 }
17}
Создание функции
Создадим функцию, которая вычисляет среднее арифметическое трёх чисел: складывает их, делит сумму на три и выводит результат на консоль. Ниже приведен пример создания этой функции.
Пока не обращайте внимание на слова static и void, их разберем позже.
averageOf3Nums
– это имя нашей функции (по аналогии с функцией equals, где equals – это имя функции).
По этому имени будет вызываться наша функция для нахождения ср. арифметического.
В скобочках через запятую определяються аргументы, которые будут передаваться в функцию – какого они типа и сколько их. Как видим, это будут три числовых значения.
Внутри же этой функции находиться код который реализует процессы нахождения среднего арифметического трех чисел: он выполняет действия над переданными аргументами и выводит результат.
Пример создания функции:
1class Test
2{
3 static void averageOf3Nums(int a, int b, int c) {
4 int sum = a + b + c; // сложить 3 числа
5 int resultAverage = sum / 3; // поделить на их количество
6 System.out.println(resultAverage); // вывести на консоль ср. ар.
7 }
8
9 public static void main(String[] args)
10 {
11 // В main используем функцию, определенную выше.
12 // Ниже вместо a будет подставлено 6,
13 // вместо b будет подставлено 9,
14 // а вместо c будет подставлено 34.
15 // И все действия, которые выполняются с a, b, c
16 // в функции выше, будут выполняться с 6, 9, 34.
17 // В переменной resultAverage окажется
18 // среднее арифметическое этих чисел,
19 // и оно будет выведено на консоль.
20 averageOf3Nums(6, 9, 34);
21
22 // Вызовем еще пару раз с другими числами.
23 averageOf3Nums(9, 44, 11);
24 averageOf3Nums(3, 12, 4);
25 }
26}
Вывод:

Код выше можно было бы переписать без функции.
1class Test
2{
3 public static void main(String []args)
4 {
5 int sum, resultAverage;
6 sum = 6+9+34; // сложить 3 числа
7 resultAverage = sum/3; // поделить на их количество
8 System.out.println(resultAverage); // вывести на консоль
9
10 sum = 9+44+11;
11 resultAverage = sum/3;
12 System.out.println(resultAverage);
13
14 sum = 3+12+4;
15 resultAverage = sum/3;
16 System.out.println(resultAverage);
17 }
18}
Вывод:

То, о чем мы говорили: много повторяющегося кода. Это неудобно и неэффективно, так как вместо одной строчки приходиться каждый раз писать три.
Возвращаемое значение функции
Если вспомнить функцию equals
, мы помним, что она возвращала true или false.
То есть результатом выполнения функции equals является boolean
значение.
Наша же функция averageOf3Nums возвращала void
(это ключевое слово можно увидеть перед именем).
Это ключевое слово значит, что функция не должна возвращать ничего. И наша функция ничего и не возвращала, она просто выполняла некоторые вычисления и потом вызывала функцию println для вывода результата вычислений на консоль.
Таким образом, ключевое слово перед именем функции – это тип возвращаемого функцией значения.
Пример функции, которая возвращает значение:
1class Test {
2 // Теперь наша функция уже не void и должна
3 // возвращать число типа int (int перед именем)
4 static int averageOf3Nums(int a, int b, int c) {
5 int sum = a + b + c;
6 int resultAverage = sum / 3;
7 // Действительно, resultAverage — это число типа int.
8 // Поэтому ключевым словом return можем вернуть
9 // это число как результат функции
10 return resultAverage;
11 }
12
13 public static void main(String[] args) {
14 // Нам уже незачем просто вызывать функцию, как в строке кода ниже —
15 // это бессмысленно, так как результат функции никуда не сохраняется.
16 // Число, которое возвращает функция, должно быть как-то использовано.
17 averageOf3Nums(6, 9, 34);
18
19 // Например, можно записать возвращаемое значение в переменную:
20 int average = averageOf3Nums(6, 9, 34);
21
22 // А затем передать её в функцию для вывода на консоль:
23 System.out.println(average);
24
25 // В результате на консоли увидим среднее арифметическое
26 }
27}
Вывод:

Следующие уроки
Область видимости в Java
5
мин.
Что такое ООП? Класс, объект.
13
мин.
Конструктор класса
9
мин.