На этапе создания приложения разработчик, как правило, знает только его структуру и не предполагает, какие данные оно будет обрабатывать. Тем не менее, в некоторых ситуациях в коде программы нужно явно указывать какие-то данные (например, количество итераций или сообщение для вывода). В этом случае на помощь приходят литералы.
Содержание:
![]()

- Что такое литералы
- Типы литералов и их применение
- Числовые литералы
- Строковые литералы
- Символьные литералы
- Логические литералы
- Джедайская техника с литералами
- Литералы в курсе JavaRush
- Заключение
Что такое литералы?
Литералы — это явно заданные значения в коде программы — константы определенного типа, которые находятся в коде в момент запуска.
class Test {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
В этом классе “Hello world!” — литерал.
Литералы бывают разных типов, которые определяются их назначением и способом написания.
Типы литералов и их применение
Все литералы — это примитивные значения (строки, числа, символы, булевы значения). Нельзя создать литерал-объект. Единственный литерал, связанный с объектом — этоnull
.
В соответствии с примитивами, литералы также делятся на разделы:
- Числовые:
- Целочисленные;
- С плавающей точкой;
- Строковые;
- Символьные;
- Логические.
Числовые литералы
Целочисленные литералы
Данный вид литералов — самый простой. Числа записываются в их стандартном виде без указывающих символов и прочего. Любое целое число — по умолчанию целочисленный литерал. То есть можно явно задать значение переменной или количество итераций в цикле. В Java поддерживается 4 системы счисления:- Двоичная
- Восьмеричная
- Десятичная
- Шестнадцатеричная
public static void main(String[] args) {
int a = 0b1101010110;
int b = 012314;
int c = 456;
int d = 0x141D12;
System.out.println("Число a в двоичной системе: " + a);
System.out.println("Число b в восьмеричной системе: " + b);
System.out.println("Число c в десятичной системе: " + c);
System.out.println("Число d в шестнадцатеричной системе: " + d);
}
Вывод:
Число a в двоичной системе: 854
Число b в восьмеричной системе: 5324
Число c в десятичной системе: 456
Число d в шестнадцатеричной системе: 1318162
Несмотря на то, что числа задаются в разных системах счисления, в программе они обрабатываются как десятичные числа.
Выход за пределы значений приведет к ошибке компиляции:
int b = 012914; // Ошибка
int d = 0x141Z12; // Ошибка
При запуске на этапе компиляции получим следующий результат:
Error:(13, 25) java: integer number too large: 012914
Error:(14,30) java: ';' expected
А что с типизацией?
Любой целочисленный литерал по умолчанию имеет тип int
. Если его значение выходит за пределы присваиваемой переменной, происходит ошибка компиляции.
При использовании типа long
необходимо в конце ставить символ L
, обозначающий этот тип:
long x = 0x1101010110; // Ошибка
long b = 1342352352351351353L; // Все в порядке
Попытка компиляции приводит к такой ошибке:
Error(11, 26) java: integer number too large: 1101010110
Литералы с плавающей точкой
Числа с плавающей точкой, или дробные числа, могут записываться двумя способами. Первый — в качестве классической десятичной дроби: 3.14159 или 2.718281282459045. Второй — в научном виде, то есть обычная десятичная дробь плюс суффикс в виде символа е или Е и степени 10, на которую нужно умножить указанную дробь. Например, 4.05E-13, это значит 4.05 * 10-13.
double a = 2.718281828459045;
double d = 4.05E-13;
System.out.println("Тип double в классическом виде: " + a);
System.out.println("Тип double в научном виде: " + d);
Вывод:
Тип double в классическом виде: 2.718281828459045
Тип double в научном виде: 4.05E-13
В отличие от целых чисел и систем счисления, научная форма записи сохраняется в переменной и обрабатывается также, как классическая форма.
Что с типизацией?
Любое число с плавающей точкой создает тип double
. Если необходимо использовать тип float
, следует добавить в конце символ f
или F
. В этом случае double
будет сведен к типу float
. Автоматически этого не происходит:
float a = 2.718281828459045; // Ошибка
float d = 4.05E-13F; // Все в порядке
При запуске на этапе компиляции видим такую ошибку:
Error:(11, 27) java: incompatible types: possible lossy conversion from double to float
Строковые литералы
Строковые литералы — это набор символов, заключенных в двойные кавычки. Данный тип используется так же часто, как и числовые литералы. В строке также могут находится служебные символы, которые необходимо экранировать (так называемые escape-последовательности). Пример:
String simpleString = "Это обычная строка. Такая же стандартная и непримечательная, как и все мы.";
String uniqueString = "А это необычная \"строка\". Хотя бы потому, что часть \"слов\" в ней в \"кавычках\".";
System.out.println(simpleString);
System.out.println(uniqueString);
Вывод:
Это обычная строка. Такая же стандартная и непримечательная, как и все мы.
А это необычная "строка". Хотя бы потому, что часть "слов" в ней в "кавычках".
Символьные литералы
Символьные литералы в Java представлены кодовой таблицей Unicode, то есть каждый символ — 16-битовое значение. Для обозначения символа в коде его обособляют одинарными кавычками. По опыту использования бывают два вида символов:- Те, что можно ввести с клавиатуры — обычные символы;
- Символы, которые просто так с клавиатуры не ввести (символы различных языков, фигуры и так далее).
,
’ или ‘@
’.
Если символ служебный (например, перенос строки или табуляция), такой символ необходимо экранировать обратным слешем.
Символы, которые нельзя просто так ввести с консоли, можно задать в их 16-битовом виде. Для этого необходимо указать код символа с префиксом \u
, например ‘\u00F7
'.
Также символы можно указывать в восьмеричном стиле (трехзначный номер), добавив в начале просто обратный слеш, например ‘\122
’. На мой взгляд, гораздо легче использовать \u
.
Пример использования:
System.out.println("Амперсанд - " + '&');
System.out.println("Символ деления - " + '\u00F7');
Вывод:
Амперсанд - &
Символ деления - ÷
Логические литералы
Самый простой литерал — это логический. Имеется всего 2 значения:false
и true
, которые указываются явно без различных символов. Такие литералы могут быть присвоены переменным типа boolean или указаны в месте, где ожидается тип boolean (например, в блоке if, хотя такая практика считается, мягко говоря, моветоном).
boolean flag = false;
if(true) {
// Действия будут выполняться всегда.
}
Джедайская техника с литералами
Благодаря символам в Java можно делать много интересных штук, в числе которых — управление эмоджи. Например, выведем улыбающееся лицо:
int smile = 0x1F600; // Здесь шестнадцатеричный код эмоджи
StringBuilder sb = new StringBuilder();
sb.append(Character.toChars(smile)); // Собираем в StringBuilder
System.out.println("Улыбающееся лицо: " + sb.toString()); // Выводим
Вывод:
Улыбающееся лицо: 😀
Несмотря на то, что отображение эмоджи может быть жутковатым (в зависимости от реализации), это решение неплохо справляется с задачей. Однако в стандартной таблице кодировок сложно искать нужные эмоджи, на официальном сайте раздел Эмотикон скуден. Гораздо проще воспользоваться дополнительными библиотеками.
Литералы в курсе JavaRush
В курсе JavaRush литералы изучаются на 10 уровне в 8 лекции курса Java Syntax, где на примерах объясняется, что такое литералы и зачем они нужны. JavaRush — онлайн-курс по программированию на Java с акцентом на практику: 1200+ задач с моментальной проверкой, мини-проекты, игры.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ