Java: Введение в ООП

Теория: Статические методы

Одна из базовых конструкций в программировании - функция. С помощью функций мы выделяем повторяющиеся блоки кода и вводим новые операции, которые не заложены в язык. В большинстве языков функции создаются просто, для этого достаточно знать синтаксис определения. Ниже пример на JavaScript, который будет понятен даже без знания языка:

// Функция возвращает строку
// Типы определять не надо, js динамический язык
function greeting() {
  return 'just a string'
}
// Вызов можно делать в любом месте
// Даже просто в файле, вне других функций
greeting() // 'Just a string'

С Java все немного сложнее. Она не позволяет создавать обычные функции. Java требует наличия класса для определения функций, которые, в этом случае, называются методами. Для сравнения перепишем пример с JavaScript на Java:

// Имя класса можно выбирать произвольно
class App {
    // public - дает возможность вызывать метод снаружи класса
    // static - пока просто нужно, позже разберемся
    // String - возвращаемый тип
    public static String greeting() {
        return "just a string";
    }
}

// Любой код в Java выполняется только внутри классов
// Поэтому вызов метода greeting() тоже будет где-то внутри

// Где-то в другом месте программы
class SomeName {
    public static void someMethod() {
        // Для вызова статического метода нужно
        // указывать имя класса
        App.greeting();
    }
}

Если вызов метода идет из того же класса, где он определен, то указывать имя класса перед ним не нужно:

class App {
    public static String greeting() {
        return "just a string";
    }

    public static void main(String[] args) {
        // Тот же класс, поэтому имя не обязательно
        greeting();
        // Хотя, чисто технически, его можно поставить
        // App.greeting();
    }
}

Основная разница между функцией greeting() на JavaScript и методом greeting() на Java заключается в наличии класса в определении метода и его же указание при вызове из других классов. Возникает вопрос, зачем нужен класс когда можно просто создавать функции? Вообще так делать было не обязательно, но создатели Java решили по-другому. Например, в Kotlin, который тоже работает на виртуальной машине Java, нет такого ограничения, там можно создавать обычные функции.

Несмотря на наличие класса и смены названия на "метод", по сути, мы получили обычную функцию, которая определена в классе и вызывается через класс. Достигается это за счет ключевого слова static. Без него методы работают совсем по-другому, о чем мы поговорим в следующих уроках. Методы, определенные как static, называют статическими.

Еще немного примеров статических методов из реальной жизни:

// Встроенные в Java
// возвращает модуль числа
var y = Math.abs(-30);

// находит минимальное число
var m = Math.min(10, 11);

// Из библиотеки org.apache.commons.lang3
// возвращает случайное число
var x = RandomUtils.nextInt(1, 1000);

Теоретически мы могли бы писать код только в таком стиле, пользуясь одними статическими методами. Этого достаточно для решения любых задач, правда код получится не очень, так как Java все же рассчитана на другой стиль работы.