Статьи

Полный курс по языку Java — от установки JDK до многопоточности и HTTP-запросов

Методы

Страница 13 из 30 · 2026-10-25 · 3 мин чтения

Объявление и вызов

public class Methods {    static int square(int x) {        return x * x;    }    static void greet(String name) {        System.out.println("Привет, " + name + "!");    }    public static void main(String[] args) {        int result = square(7);        System.out.println(result);        greet("Анна");    }}

Сигнатура: модификаторы, возвращаемый тип, имя, параметры. void — метод ничего не возвращает.

Параметры передаются по значению

В Java все аргументы передаются по значению. Для примитивов копируется значение, для объектов — копия ссылки.

import java.util.Arrays;public class PassByValue {    static void changePrimitive(int x) {        x = 100;    }    static void changeArray(int[] arr) {        arr[0] = 100;    }    static void replaceArray(int[] arr) {        arr = new int[]{9, 9, 9};    }    public static void main(String[] args) {        int a = 1;        changePrimitive(a);        System.out.println(a);        int[] data = {1, 2, 3};        changeArray(data);        System.out.println(Arrays.toString(data));        replaceArray(data);        System.out.println(Arrays.toString(data));    }}

Вывод:

1[100, 2, 3][100, 2, 3]

Метод может изменить содержимое объекта, но не может подменить переданную ссылку у вызывающего кода.

Возврат значения

public class Returns {    static boolean isEven(int n) {        return n % 2 == 0;    }    static int max(int a, int b) {        if (a > b) {            return a;        }        return b;    }    static String classify(int n) {        if (n < 0) {            return "отрицательное";        }        if (n == 0) {            return "ноль";        }        return "положительное";    }    public static void main(String[] args) {        System.out.println(isEven(4));        System.out.println(max(3, 9));        System.out.println(classify(-5));    }}

Оператор return завершает метод. Все пути выполнения метода с непустым типом должны возвращать значение.

Перегрузка

Методы с одинаковым именем, но разными параметрами:

public class Overloading {    static int add(int a, int b) {        return a + b;    }    static double add(double a, double b) {        return a + b;    }    static int add(int a, int b, int c) {        return a + b + c;    }    static String add(String a, String b) {        return a + b;    }    public static void main(String[] args) {        System.out.println(add(1, 2));        System.out.println(add(1.5, 2.5));        System.out.println(add(1, 2, 3));        System.out.println(add("a", "b"));    }}

Различать перегруженные методы по возвращаемому типу нельзя.

Рекурсия

Метод вызывает сам себя. Обязательны базовый случай и шаг к нему:

public class Recursion {    static long factorial(int n) {        if (n <= 1) {            return 1;        }        return n * factorial(n - 1);    }    static int fibonacci(int n) {        if (n < 2) {            return n;        }        return fibonacci(n - 1) + fibonacci(n - 2);    }    static int gcd(int a, int b) {        return b == 0 ? a : gcd(b, a % b);    }    public static void main(String[] args) {        System.out.println(factorial(10));        System.out.println(fibonacci(10));        System.out.println(gcd(48, 18));    }}

Слишком глубокая рекурсия приводит к StackOverflowError. Если можно, заменяйте рекурсию циклом.

Статические и обычные методы

Метод с static принадлежит классу и вызывается без объекта. Метод без static работает с конкретным объектом, это тема следующей части курса.

Разбиение задачи на методы

public class Primes {    static boolean isPrime(int n) {        if (n < 2) {            return false;        }        for (int i = 2; (long) i * i <= n; i++) {            if (n % i == 0) {                return false;            }        }        return true;    }    static void printPrimes(int limit) {        for (int i = 2; i <= limit; i++) {            if (isPrime(i)) {                System.out.print(i + " ");            }        }        System.out.println();    }    public static void main(String[] args) {        printPrimes(50);    }}

Правила хорошего метода: одна задача, понятное имя-глагол, не больше 3–4 параметров.

Задачи для самостоятельной работы

  1. Метод, считающий сумму цифр числа.
  2. Метод, проверяющий, является ли строка числом.
  3. Метод, возвращающий наибольший общий делитель трех чисел.
  4. Метод, переворачивающий массив на месте.
  5. Рекурсивный метод для вычисления степени pow(x, n).