JavaRush /Blog Java /Random-PL /Literały w Javie

Literały w Javie

Opublikowano w grupie Random-PL
Na etapie tworzenia aplikacji programista z reguły zna jedynie jej strukturę i nie zakłada, jakie dane będzie przetwarzał. Jednak w niektórych sytuacjach trzeba jawnie określić pewne dane w kodzie programu (na przykład liczbę iteracji lub komunikat, który ma zostać wyświetlony). W tym przypadku na ratunek przychodzą literały. Treść:

Co to są literały?

Literały są jawnie określonymi wartościami w kodzie programu - stałymi określonego typu, które znajdują się w kodzie w momencie uruchomienia.
class Test {
   public static void main(String[] args) {
       System.out.println("Hello world!");
   }
}
W tej klasie „Witaj, świecie!” - dosłownie. Literały występują w różnych typach, w zależności od ich przeznaczenia i sposobu ich zapisu.

Rodzaje literałów i ich zastosowania

Wszystkie literały są wartościami pierwotnymi (łańcuchy, liczby, znaki, wartości logiczne). Nie można utworzyć obiektu dosłownego. Jedynym literałem powiązanym z obiektem jest null. Według prymitywów literały są również podzielone na sekcje:
  1. Numeryczne:
    • Liczby całkowite;
    • zmiennoprzecinkowy;
  2. Strunowy;
  3. Postać;
  4. Łamigłówka.

Literały numeryczne

Literały całkowite

Ten rodzaj dosłowności jest najprostszy. Liczby są zapisywane w ich standardowej formie, bez podawania znaków lub czegokolwiek innego. Domyślnie każda liczba całkowita jest literałem całkowitym. Oznacza to, że można jawnie ustawić wartość zmiennej lub liczbę iteracji w pętli. Java obsługuje 4 systemy liczbowe:
  • Dwójkowy
  • ósemkowy
  • Dziesiętny
  • Szesnastkowy
JDK 7 wprowadził możliwość zapisu wartości binarnych . Odbywa się to za pomocą przedrostka 0b lub 0B . Następnie następuje pisanie przy użyciu 0 i 1. Liczby ósemkowe są zapisywane przy użyciu wiodącego 0. Prawidłowe cyfry to od 0 do 7. Wpisanie 09 lub 08 spowoduje błąd kompilacji. Z systemem liczb dziesiętnych nie ma problemów : liczby są podawane w znanej nam formie. Jedynym ograniczeniem jest to, że liczba nie może zaczynać się od 0, ponieważ kompilator przyjmie ją jako ósemkową. Liczby w systemie szesnastkowym zapisuje się z przedrostkami 0x i 0X. Poprawne liczby to od 0 do 15, gdzie cyfry 10-15 są oznaczone odpowiednio symbolami 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);
}
Wynik: Liczba a w systemie binarnym: 854 Liczba b w systemie ósemkowym: 5324 Liczba c w systemie dziesiętnym: 456 Liczba d w systemie szesnastkowym: 1318162 Pomimo tego, że liczby są podawane w różnych systemach liczbowych, w programie są one przetwarzane jako dziesiętne liczby. Przekroczenie wartości spowoduje błąd kompilacji:
int b = 012914; // Ошибка
int d = 0x141Z12; // Ошибка
Po uruchomieniu na etapie kompilacji otrzymujemy następujący wynik:

Error:(13, 25) java: integer number too large: 012914
Error:(14,30) java: ';' expected
A co z pisaniem? Każdy literał całkowity ma domyślny typ int. Jeśli jej wartość wykracza poza granice przypisanej zmiennej, pojawia się błąd kompilacji. Używając typu longnależy na końcu umieścić symbol Lwskazujący ten typ:
long x = 0x1101010110; // Ошибка
long b = 1342352352351351353L; // Все в порядке
Próba kompilacji kończy się następującym błędem:

Error(11, 26) java: integer number too large: 1101010110

Literały zmiennoprzecinkowe

Liczby zmiennoprzecinkowe lub liczby ułamkowe można zapisać na dwa sposoby. Pierwszy to klasyczny ułamek dziesiętny: 3,14159 lub 2,718281282459045. Drugi ma formę naukową, to znaczy zwykły ułamek dziesiętny plus przyrostek w postaci symbolu e lub E oraz potęgi 10, przez którą należy pomnożyć określony ułamek. Na przykład 4,05E-13 oznacza to 4,05 * 10 -13 .
double a = 2.718281828459045;
double d = 4.05E-13;
System.out.println("Тип double в классическом виде: " + a);
System.out.println("Тип double в научном виде: " + d);
Wynik: Klasyczny podwójny typ: 2,718281828459045 Naukowy podwójny typ: 4,05E-13 W przeciwieństwie do liczb całkowitych i systemów liczbowych, notacja naukowa jest przechowywana w zmiennej i przetwarzana w taki sam sposób jak notacja klasyczna. A co z pisaniem? Dowolna liczba zmiennoprzecinkowa tworzy typ double. Jeśli chcesz użyć typu float, musisz dodać flub na końcu F. W tym przypadku doublezostanie on zredukowany do typu float. Nie dzieje się to automatycznie:
float a = 2.718281828459045; // Ошибка
float d = 4.05E-13F; // Все в порядке
Rozpoczynając od etapu kompilacji widzimy następujący błąd:

Error:(11, 27) java: incompatible types: possible lossy conversion from double to float

Literały łańcuchowe

Literały łańcuchowe to zestawy znaków ujęte w podwójne cudzysłowy. Ten typ jest używany równie często, jak literały numeryczne. Linia może zawierać także znaki serwisowe, które wymagają zmiany znaczenia (tzw. sekwencje specjalne). Przykład:
String simpleString = "Это обычная строка. Такая же стандартная и непримечательная, Jak и все мы.";
String uniqueString = "А это необычная \"строка\". Хотя бы потому, что часть \"слов\" в ней в \"кавычках\".";
System.out.println(simpleString);
System.out.println(uniqueString);
Dane wyjściowe: To jest normalny ciąg. Tak samo standardowy i niczym się nie wyróżniający jak reszta z nas. I to jest niezwykła „linia”. Choćby dlatego, że niektóre zawarte w nim „słowa” są ujęte w „cudzysłów”.

Literały znakowe

Literały znakowe w Javie są reprezentowane przez zestaw znaków Unicode, co oznacza, że ​​każdy znak jest wartością 16-bitową. Aby wskazać symbol w kodzie, oddziela się go pojedynczymi cudzysłowami. Z doświadczenia wynika, że ​​istnieją dwa rodzaje symboli:
  1. Te, które można wprowadzić z klawiatury, to zwykłe znaki;
  2. Symbole, których nie można po prostu wprowadzić z klawiatury (symbole w różnych językach, kształty itp.).
Znaki regularne można określić jawnie: ' ,' lub ' @'. Jeśli znak jest znakiem usługowym (na przykład podziałem wiersza lub tabulatorem), taki znak musi być poprzedzony ukośnikiem odwrotnym. Znaki, których nie można po prostu wprowadzić z konsoli, można określić w ich postaci 16-bitowej. Aby to zrobić, musisz podać kod znaku z przedrostkiem \u, na przykład „ \u00F7”. Można także określić znaki w stylu ósemkowym (liczba trzycyfrowa), po prostu dodając na początku ukośnik odwrotny, na przykład „ \122”. Moim zdaniem jest dużo łatwiejszy w obsłudze \u. Przykład użycia:
System.out.println("Амперсанд - " + '&');
System.out.println("Символ деления - " + '\u00F7');
Dane wyjściowe: Ampersand - & Symbol dzielenia - ÷

Literały logiczne

Najprostszy dosłowny jest dosłowny. Istnieją tylko 2 wartości: falsei true, które są określone jawnie, bez różnych symboli. Takie literały można przypisać do zmiennych typu boolean lub podać w miejscu, w którym oczekiwany jest typ boolean (na przykład w bloku if, chociaż jest to praktyka, delikatnie mówiąc, uważana za niestosowną).
boolean flag = false;

if(true) {
    // Действия будут выполняться всегда.
}

Technika Jedi z dosłownymi literami

Dzięki symbolom w Javie możesz robić wiele ciekawych rzeczy, w tym zarządzać emoji. Na przykład wyświetlmy uśmiechniętą twarz:
int smile = 0x1F600; // Здесь шестнадцатеричный kod эмоджи
StringBuilder sb = new StringBuilder();
sb.append(Character.toChars(smile)); // Собираем в StringBuilder
System.out.println("Улыбающееся лицо: " + sb.toString()); // Выводим
Wniosek: Uśmiechnięta twarz: 😀 Chociaż wyświetlanie emoji może być przerażające (w zależności od implementacji), to rozwiązanie dobrze sobie radzi. Jednak znalezienie pożądanego emoji w standardowej tabeli kodowania jest trudne, sekcja emotikonów na oficjalnej stronie jest skąpa. Dużo łatwiej jest skorzystać z dodatkowych bibliotek.

Literały w kursie JavaRush

W kursie JavaRush literały są badane na poziomie 10 w wykładzie 8 kursu Java Syntax , gdzie przykłady wyjaśniają, czym są literały i dlaczego są potrzebne. JavaRush to internetowy kurs programowania w języku Java z naciskiem na praktykę: ponad 1200 zadań z natychmiastową weryfikacją, miniprojekty, gry.

Wniosek

Literały w Javie są wygodną rzeczą w każdym programie, ale należy ich używać tam, gdzie jest to właściwe. Nie należy kodować na stałe parametrów połączenia z bazą danych ani żadnych wartości, które mogą ulec zmianie w trakcie cyklu życia programu w kodzie źródłowym.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION