Константы (static final)
Часть раздела Объектно-ориентированное программирование путешествия по Java на Coddy — урок 18 из 87.
Сочетание static и final создает константу — значение, которое принадлежит классу и никогда не может измениться. Это стандартный способ определения констант в Java.
public class GameSettings {
public static final int MAX_PLAYERS = 4;
public static final double GRAVITY = 9.81;
public static final String GAME_TITLE = "Space Adventure";
}По соглашению, имена констант используют UPPER_SNAKE_CASE, чтобы отличать их от обычных переменных. Поскольку они являются одновременно static и final, вы обращаетесь к ним через имя класса, и гарантируется, что их значения никогда не изменятся:
System.out.println(GameSettings.MAX_PLAYERS); // 4
// GameSettings.MAX_PLAYERS = 8; // Ошибка! Невозможно изменитьКонстанты обычно объявляются public, так как они предназначены для совместного использования во всем приложении. Вспомните такие значения, как Math.PI — это константа public static final, которую может использовать любой код.
Зачем использовать константы вместо жестко закодированных значений? Если вы напишете 4 по всему коду, а позже вам понадобится изменить это значение на 6, вам придется искать и обновлять каждое вхождение. С такой константой, как MAX_PLAYERS, вы меняете её в одном месте.
Константы также делают код более читаемым — MAX_PLAYERS понятнее, чем загадочное 4.
Задание
ЛегкоДавайте создадим утилиту MathConstants, которая хранит важные математические значения в виде констант, а также CircleCalculator, который использует эти константы для выполнения вычислений.
Вы создадите два файла для организации вашего кода:
MathConstants.java: Создайте класс, который содержит математические константы, используя поляpublic static final:PIсо значением3.14159E(число Эйлера) со значением2.71828GOLDEN_RATIOсо значением1.61803
Main.java: Используйте ваши константы для выполнения вычислений круга. Вы получите радиус на вход и должны вывести три строки:- Площадь круга:
Area: [value] - Длина окружности:
Circumference: [value] - Диаметр, масштабированный по золотому сечению:
Golden Diameter: [value]
- Площадь круга:
Для вычислений:
- Площадь = PI * radius * radius
- Длина окружности = 2 * PI * radius
- Золотой диаметр = 2 * radius * GOLDEN_RATIO
Вы получите одно входное значение: радиус (double).
Форматируйте все выходные значения до 2 знаков после запятой, используя String.format("%.2f", value). Обращайтесь к константам через имя класса, например MathConstants.PI.
Шпаргалка
Сочетание static и final создает константу — значение, которое принадлежит классу и никогда не может быть изменено:
public class GameSettings {
public static final int MAX_PLAYERS = 4;
public static final double GRAVITY = 9.81;
public static final String GAME_TITLE = "Space Adventure";
}По соглашению, имена констант записываются в стиле UPPER_SNAKE_CASE. Доступ к константам осуществляется через имя класса:
System.out.println(GameSettings.MAX_PLAYERS); // 4
// GameSettings.MAX_PLAYERS = 8; // Ошибка! Невозможно изменитьКонстанты обычно объявляются как public, чтобы их можно было использовать во всем приложении. Они делают код более удобным в сопровождении и читаемым, заменяя жестко закодированные значения осмысленными именами.
Попробуйте сами
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double radius = scanner.nextDouble();
// TODO: Вычислите площадь, используя MathConstants.PI
// Формула: PI * radius * radius
// TODO: Вычислите длину окружности, используя MathConstants.PI
// Формула: 2 * PI * radius
// TODO: Вычислите золотой диаметр, используя MathConstants.GOLDEN_RATIO
// Формула: 2 * radius * GOLDEN_RATIO
// TODO: Выведите результаты, отформатированные до 2 знаков после запятой
// Используйте String.format("%.2f", value) для форматирования
// Формат вывода:
// Area: [value]
// Circumference: [value]
// Golden Diameter: [value]
}
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
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
Паттерн «Команда»Паттерн «Адаптер»Паттерн «Декоратор»Паттерн «Шаблонный метод»Паттерн «Состояние»Паттерн «Компоновщик»Паттерн «Итератор»