Статические методы
Часть раздела Объектно-ориентированное программирование путешествия по 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(). Они предоставляют функциональность, которая имеет смысл на уровне класса, а не для отдельных объектов.
Задание
ЛегкоДавайте создадим утилитарный класс 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
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово thisМетодыПоля (атрибуты)Метод-конструкторПерегрузка конструкторовИтоги — Простой калькулятор4Наследование
Основы наследования (extends)Ключевое слово superПереопределение методов (@Override)Цепочка конструкторовКласс ObjectОдиночное и многоуровневое наследованиеПочему нет множественного наследования классовИтоги — Иерархия сотрудников7Специальные методы и класс Object
Метод toString()equals() и hashCode()Метод clone()compareTo() и ComparableИнтерфейс ComparatorПовторение — Кастомная сортировка2Модификаторы доступа и инкапсуляция
Обзор уровней доступаМетоды геттеры и сеттерыСокрытие данныхКлючевое слово finalИтоги — Менеджер банковского счета5Полиморфизм
Основы перегрузки методовПереопределение методов (Run-Time)Upcasting и DowncastingОператор instanceofАбстрактные классы и методыИтоги: Калькулятор фигур8Продвинутые концепции ООП
Композиция против наследованияАгрегация против композицииВнутренние, вложенные и анонимные классыEnums и методы перечисленийRecords (Java 16+)Sealed-классы (Java 17+)11Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн BuilderПаттерн ObserverПаттерн Strategy3Свойства класса и статические члены
Переменные экземпляра и статические переменныеСтатические методыСтатические блокиКонстанты (static final)Итоги: Счетчик и утилиты6Интерфейсы и абстрактные классы
Введение в интерфейсыРеализация интерфейсовРеализация нескольких интерфейсовDefault и Static методы в интерфейсахАбстрактные классы vs ИнтерфейсыФункциональные интерфейсыИтоги — Платежная система9Обобщения
Введение в обобщенияОбобщенные классыОбобщенные методыОграниченные параметры типаСимволы подстановки (Wildcards: ?, extends, super)Итоги — Обобщенный контейнер12Паттерны проектирования. Часть 2
Паттерн «Команда»Паттерн «Адаптер»Паттерн «Декоратор»Паттерн «Шаблонный метод»Паттерн «Состояние»Паттерн «Компоновщик»Паттерн «Итератор»