Menu
Coddy logo textTech

Константы (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.

challenge icon

Задание

Легко

Давайте создадим утилиту MathConstants, которая хранит важные математические значения в виде констант, а также CircleCalculator, который использует эти константы для выполнения вычислений.

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

  • MathConstants.java: Создайте класс, который содержит математические константы, используя поля public static final:
    • PI со значением 3.14159
    • E (число Эйлера) со значением 2.71828
    • GOLDEN_RATIO со значением 1.61803
    Не забудьте использовать UPPER_SNAKE_CASE для имен констант!
  • 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]
        
    }
}
quiz iconПроверьте себя

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

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