Разное

Java константы: Java | Переменные и константы

Константы в Java | GeekBrains

Как объявлять и использовать константы в Java, какими они бывают и чем удобны.

2 минуты

40821

Автор статьи

Мария Лисянская

Автор статьи

Мария Лисянская

https://gbcdn.mrgcdn.ru/uploads/post/1276/og_cover_image/1366b3a063663b9cfcf53127e88d7e17

Константа — постоянное значение, известное до начала работы программы и заданное в коде один раз.

Почему это удобно:

  • Если вы используете значение многократно, а в ходе разработки его потребуется изменить, достаточно будет одной правки.
  • Вместо длинного значения можно ставить в коде короткое имя константы.
  • Нет риска ошибиться при очередном вводе значения.

По логике это надо бы называть «постоянной» — в противоположность переменной, — но традиция уже сложилась.

Константа может хранить число, строку, символ, ссылку на объект и др. Значение константы еще называют литералом (от англ. literal — буквальный), потому что его записывают как есть — без предварительных вычислений.

При объявлении констант в Java используют ключевое слово final — оно показывает, что литерал не должен меняться. Именовать константы принято заглавными буквами со знаком подчеркивания вместо пробела: ВОТ_ТАК.

Пример строковой константы:


public static final String MY_CONSTANT="Мой текст";
//создаем строку и присваиваем ей постоянное значение

Модификаторы public и static означают, что перед нами публичная константа уровня класса — без привязки к отдельным объектам, классам и т.д. Это аналог глобальной константы в Java. Значение константы всегда указывают при её создании. Если инициализация отложена, перед нами не константа, а «финальная переменная». Её значение тоже обычно задают только один раз, но:

  • оно может быть получено в результате вычислений;
  • если внутри финальной переменной лежит объект, его свойства можно менять, т. к. финализация действует на ссылку, а не на значение.

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

Неименованные константы в Java

Неименованная константа — постоянное произвольное значение, которое вносят в код однократно:


if (i < 5 ) // 5 - это константа;

Если значение нужно использовать ещё где-то, лучше вынести его в именованную константу или финальную переменную.

Константы встроенных классов Java

Класс Integer в Джаве отвечает за обработку целых чисел типа int. Ограничителями диапазона значений int служат константы MIN_VALUE (минимальное значение) и MAX_VALUE (максимальное). Константы с теми же именами существуют и в остальных классах для обработки числовых данных: byte, long, float, double. При создании объекта нужного типа классы обращаются к пулам — массивам констант Java, где хранятся допустимые элементы диапазона.

Где хранить константы

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

java_developerjava languagejava

Нашли ошибку в тексте? Напишите нам.

java — Литералы — константы?

Вопрос задан

Изменён 7 месяцев назад

Просмотрен 1k раза

Литералы

В Java литералы применяются для представления постоянных значений в форме, удобной для восприятия. Например, число 100 является литералом. Литералы часто называют константами. Как правило, структура литералов и их использование интуитивно понятны. Они уже встречались в рассмотренных ранее примерах программ, а теперь пришло время дать им формальное определение. В Java предусмотрены литералы для всех простых типов. Способ представления литерала зависит от типа данных. Как пояснялось ранее, константы, соответствующие символам, заключаются в одинарные кавычки. Например, и ‘а ‘, и ‘ % ‘ являются символьными константами. Целочисленные константы записываются как числа без дробной части. Например, целочисленными константами являются 10 и -100. При формировании константы с плавающей точкой необходимо указывать десятичную точку, после которой следует дробная часть. Например, 11. 123 — это константа с плавающей точкой. В Java поддерживается и так называемый экспоненциальный формат представления чисел с плавающей точкой. По умолчанию целочисленные литералы относятся к типу int. Если же требуется определить литерал типа long, после числа следует указать букву l или L.

Например, 12 — это константа типа int, а 121 — константа типа long. По умолчанию литералы с плавающей точкой относятся к типу douЫe. А для того чтобы задать литерал типа float, следует указать после числа букву f или F. Так, например, к типу float относится литерал 10 .19F. Несмотря на то что целочисленные литералы по умолчанию создаются как значения типа int, их можно присваивать переменным типа char, byte, short и long. Присваиваемое значение приводится к целевому типу. Переменной типа long можно также присвоить любое значение, представленное целочисленным литералом.

Вопросы:
Литералы это значения переменных?
Почему литералы часто называют константами? Если константа это, фиксированное значение, которое не должно меняться.

  • java
  • терминология

5

Из википедии:

Литералы представляют собой константы, включаемые непосредственно в текст программы. массив литерал массива, состоящий из целочисленных литералов someArray[1] = 42;

Вопрос прям философский.

Литерал — это прежде всего синтаксическая конструкция. Т.е. литерал — это элемент ТЕКСТА программы.

Литерал не является значением переменной. Литерал может быть использован для того, чтобы задать значение переменной.

Затрудняюсь сказать почему, но никто не говорит «присвоить переменной литерал» или «передать литерал в функцию». Вместо этого говорят «присвоить переменной константу», «передать константу в функцию». Хотя с точки зрения текста программы первый вариант является более точным. Вот отсюда и высказывание «литералы часто называют константами».

На сколько я понял, и переменная и константа — именованные области памяти в которые можно поместить литерал. Т.е. литерал это литерал, а никакая не константа, да он неизменяем, но константой с точки зрения ЯП он от этого не становится (считаю вообще некорректно и бессмысленно говорить о его неизменяемости, так же как о неизменяемости тегов ЯП например).

Просто в переменной литерал можно заменить на другой литерал, а в константе нет. После помещения литерала в переменную или константу, он становится их значением, но помещать литерал куда-то не обязательно, он может существовать и работать сам по себе, просто пока он не помещен ни в какую именованную область памяти, к нему нельзя обратиться, но его можно например вывести (echo ‘строчный литерал’;). Понятие литерал необходимо, чтобы понимать о чем идет речь: вот есть переменная, есть функция, есть константа, есть инструкция, есть литерал.

Ведь понятие константы изначально рождается от изменяемости чего то, типа + и -, свет и темнота, true и false, короче инь и янь, нет понятия света — нет понятия темноты, нет понятия изменчивости нет константы, а какая литерал константа если он неизменяем «по природе».

1

java — Помещение всех констант в один класс android

Есть сообщения, похожие на мои, но они относятся к началу 2010-х годов, поэтому я не уверен, что что-то изменилось. Я только что получил обзор кода, и рецензент предложил мне поместить все мои константы в один класс и вызывать их оттуда. Как мне это сделать и правильно ли это? Как мне объявить и вызвать их?

  • java
  • андроид
  • класс
  • константы

3

«Правильно» это или нет — в основном дело вкуса. Здесь нет правильного или неправильного.

Что касается того, как их использовать — просто создайте класс с серией из полей public static final :

 public class Constants {
    public static final String FIRST_NAME = "Tarik";
    public static final String LAST_NAME = "Hodzic";
}
 

И тогда другие классы могут просто использовать их:

 public class SomeClass {
    публичная строка getFullName () {
        вернуть Константы.FIRST_NAME + " " + Константы.LAST_NAME;
    }
}
 

0

Для этого и нужны перечисления.

https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

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

Тогда, когда бы вы ни захотели их использовать, это просто: category.typeN.

Это хорошо, потому что если изменить имя типа. Рефакторинг в перечислении и он изменит все «константы»

2

Теперь вместо констант можно использовать аннотации:

 import android.support.annotation.IntDef;
импортировать java.lang.annotation.Retention;
импортировать статический java.lang.annotation.RetentionPolicy.SOURCE;
@IntDef({
        TypeBodyItem.BODY_TYPE_UNKNOWN,
        TypeBodyItem.BODY_TYPE_HTML,
        TypeBodyItem.BODY_TYPE_ARTICLE,
        TypeBodyItem.BODY_TYPE_MEDIA,
})
@Retention(ИСТОЧНИК)
публичный @interface TypeBodyItem {
    интервал BODY_TYPE_UNKNOWN = 0;
    интервал BODY_TYPE_HTML = 10;
    интервал BODY_TYPE_ARTICLE = 20;
    интервал BODY_TYPE_MEDIA = 30;
}
 

Статья и документация об аннотациях.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *