Menu
Coddy logo textTech

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

Часть раздела Объектно-ориентированное программирование путешествия по Java на Coddy — урок 16 из 87.

Точно так же, как статические переменные принадлежат классу, а не экземплярам, статические методы также принадлежат самому классу. Вы можете вызывать их без создания объекта.

Объявите статический метод, добавив ключевое слово static:

public class MathHelper {
    public static int add(int a, int b) {
        return a + b;
    }
    
    public static int multiply(int a, int b) {
        return a * b;
    }
}

// Вызов без создания объекта
int sum = MathHelper.add(5, 3);      // 8
int product = MathHelper.multiply(4, 2);  // 8

Статические методы имеют одно важное ограничение: они не могут обращаться к переменным экземпляра или методам экземпляра напрямую. Поскольку статические методы существуют без объекта, в них нет ссылки this, с которой можно было бы работать.

public class Counter {
    private int count;              // Переменная экземпляра
    private static int total;       // Статическая переменная
    
    public static void incrementTotal() {
        total++;      // OK - доступ к статической переменной
        // count++;   // Ошибка! Невозможно получить доступ к переменной экземпляра
    }
}

Статические методы идеально подходят для вспомогательных операций, которые не зависят от состояния объекта — вспомните такие методы, как Math.sqrt() или Integer.parseInt(). Они предоставляют функциональность, которая имеет смысл на уровне класса, а не для отдельных объектов.

challenge icon

Задание

Легко

Давайте создадим утилитарный класс StringUtils, который предоставляет полезные методы для манипуляции строками без необходимости создания объектов — это идеальный пример для демонстрации статических методов!

Вы создадите два файла для организации вашего кода:

  • StringUtils.java: Создайте утилитарный класс со статическими методами, которые выполняют распространенные операции со строками:
    • Статический метод countVowels(String text), который возвращает количество гласных (a, e, i, o, u — как в верхнем, так и в нижнем регистре) в заданной строке
    • Статический метод reverse(String text), который возвращает перевернутую строку
    • Статический метод isPalindrome(String text), который возвращает true, если строка читается одинаково слева направо и справа налево (без учета регистра), и false в противном случае
  • Main.java: Используйте ваш утилитарный класс для обработки строки. Вы получите один входной параметр: текстовую строку. Вызовите каждый статический метод напрямую через имя класса и выведите три строки:
    • Vowels: [count]
    • Reversed: [reversed string]
    • Palindrome: true или Palindrome: false

Вы получите один входной параметр: текстовую строку для анализа.

Помните, что статические методы вызываются с использованием имени класса (например, StringUtils.countVowels(text)), а не путем предварительного создания экземпляра. Это делает утилитарные классы удобными для операций, которым не нужно сохранять какое-либо состояние между вызовами.

Шпаргалка

Статические методы принадлежат самому классу и могут быть вызваны без создания объекта. Объявляйте их с помощью ключевого слова static:

public class MathHelper {
    public static int add(int a, int b) {
        return a + b;
    }
}

// Вызов без создания объекта
int sum = MathHelper.add(5, 3);  // 8

Важное ограничение: Статические методы не могут напрямую обращаться к переменным экземпляра или методам экземпляра, так как они существуют без объекта и не имеют ссылки this:

public class Counter {
    private int count;              // Переменная экземпляра
    private static int total;       // Статическая переменная
    
    public static void incrementTotal() {
        total++;      // OK - доступ к статической переменной
        // count++;   // Ошибка! Невозможно получить доступ к переменной экземпляра
    }
}

Статические методы идеально подходят для вспомогательных операций, которые не зависят от состояния объекта, таких как Math.sqrt() или Integer.parseInt().

Попробуйте сами

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String text = scanner.nextLine();
        
        // TODO: Используйте статические методы StringUtils для анализа текста
        // Вызовите StringUtils.countVowels(text), чтобы получить количество гласных
        // Вызовите StringUtils.reverse(text), чтобы получить перевернутую строку
        // Вызовите StringUtils.isPalindrome(text), чтобы проверить, является ли строка палиндромом
        
        // TODO: Выведите результаты в формате:
        // Vowels: [количество]
        // Reversed: [перевернутая строка]
        // Palindrome: true/false
        
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование