JavaRush /Java блог /Random UA /Літерали в Java

Літерали в Java

Стаття з групи Random UA
На етапі створення програми розробник, зазвичай, знає лише його структуру і передбачає, які дані воно оброблятиме. Тим не менш, у деяких ситуаціях у коді програми потрібно явно вказувати якісь дані (наприклад, кількість ітерацій або повідомлення для виведення). І тут на допомогу приходять літерали. Зміст:

Що таке літерали?

Літерали — це явно задані значення коду програми — константи певного типу, які у коді під час запуску.
class Test {
   public static void main(String[] args) {
       System.out.println("Hello world!");
   }
}
У цьому класі "Hello world!" - Літерал. Літерали бувають різних типів, які визначаються їх призначенням та способом написання.

Типи літералів та їх застосування

Усі літерали - це примітивні значення (рядки, числа, символи, булеві значення). Не можна створити літерал-об'єкт. Єдиний літерал, пов'язаний з об'єктом – це null. Відповідно до примітивів, літерали також поділяються на розділи:
  1. Числові:
    • Цілочисельні;
    • З плаваючою точкою;
  2. Рядкові;
  3. Символьні;
  4. Логічні.

Числові літерали

Цілочисленні літерали

Цей вид літералів - найпростіший. Числа записуються в їхньому стандартному вигляді без вказівних символів та іншого. Будь-яке ціле число — за замовчуванням цілий літерал. Тобто можна задати значення змінної чи кількість ітерацій у циклі. У Java підтримується 4 системи числення:
  • Двійкова
  • Вісімкова
  • Десяткова
  • Шістнадцяткова
У JDK 7 з'явилася можливість запису бінарних значень. Робиться це за допомогою префікса 0b або 0B . Далі йде запис з використанням 0 і 1. Числа у вісімковій системі записуються за допомогою ведучого 0. Допустимі цифри - від 0 до 7. Запис 09 або 08 викликає помилку компіляції. З десятковою системою числення немає жодних проблем: числа вказуються у звичному нам вигляді. Єдине обмеження - число не може починатися з 0, оскільки компілятор прийме його за вісімкове. Числа в шістнадцятковій системі записуються за допомогою префіксів 0x та 0X. Допустимі цифри - від 0 до 15, де числа 10-15 позначаються символами AF відповідно.
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-бітове значення. Для позначення символу коді його відокремлюють одинарними лапками. За досвідом використання бувають два види символів:
  1. Ті, що можна запровадити з клавіатури - звичайні символи;
  2. Символи, які просто так з клавіатури не ввести (символи різних мов, фігури тощо).
Звичайні символи можна вказати у явному вигляді: ' ,' або ' @'. Якщо символ службовий (наприклад, перенесення рядка або табуляція), такий символ необхідно екранувати зворотним слішем. Символи, які не можна просто так ввести з консолі, можна задати у їх 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+ задач з моментальною перевіркою, міні-проекти, ігри.

Висновок

Літерали в Java - зручна річ у будь-якій програмі, проте використовувати їх необхідно в тих місцях, де це доречно. Не варто хардкодити у вихідних параметрах підключення до БД або будь-які значення, які можуть змінитися під час життєвого циклу програми.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ