На етапі створення програми розробник, зазвичай, знає лише його структуру і передбачає, які дані воно оброблятиме. Тим не менш, у деяких ситуаціях у коді програми потрібно явно вказувати якісь дані (наприклад, кількість ітерацій або повідомлення для виведення). І тут на допомогу приходять літерали. Зміст:
- Що таке літерали
- Типи літералів та їх застосування
- Числові літерали
- Рядкові літерали
- Символьні літерали
- Логічні літерали
- Джедайська техніка з літералами
- Літерали в курсі 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()); // Выводим
Висновок: Усміхнене обличчя: 😀 Незважаючи на те, що відображення емоджі може бути моторошним (залежно від реалізації), це рішення непогано справляється із завданням. Однак у стандартній таблиці кодувань складно шукати потрібні емоджі, на офіційному сайті розділ Емотикон мізерний. Набагато простіше користуватися додатковими бібліотеками.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ