Литералы и константы
Литерал - это постоянное значение, записанное в программе в читаемой форме. Например, число 100 - это литерал, одиночный символ и текстовая строка тоже могут быть литералами и т. д.
Литерал отличается от константы и переменной тем, что ему не может быть присвоено значение. На самом деле, в своей программе вы в качестве значений констант и переменных обычно используете литералы. Например:
Counter= 1;
Textstr = "Произвольная строка";
ch = '?';
А = 4е-1;
Здесь Counter, Textstr, S, А – это переменные, а 1, "Произвольная строка", ' ? ', 4е-1 - литералы.
Литерал может иметь значение любого простого типа данных. Тип литерала определяется формой его записи. Например, ' ?' - это литерал символьного типа, а «?» - строкового; 10 - типа int, а 10.0 - типа double. Вещественные числа записываются либо с десятичной точкой, либо в так называемой научной (экспоненциальной) нотации с указанием степени числа 10: 4е-1 - то же самое, что 0.4.
Для того, чтобы заставить компилятор считать литерал, опознаваемый им как данные одного типа, данными другого типа, служат модификаторы типа. Символ L (заглавный или строчный) превращает литерал типа int в литерал типа long:
int nl = 24;
long n2 = 24L;
Вещественные литералы имеют по умолчанию тип данных double. Чтобы его поменять на float, добавьте к присваиваемому значению символ F:
float fl = 12.34F;
Целочисленные литералы распознаются как тип int, но их можно присваивать также переменным других целых типов: short, byte и char - при условии, что значение литерала не выходит за пределы диапазона для соответствующего типа, а переменной типа long - без всяких условий.
Шестнадцатеричные и восьмеричные литералы
Если вы уже когда-нибудь писали программы, то знаете, что нередко приходится работать с числами, которые удобнее представлять не в десятичной записи. Язык Java позволяет без труда использовать восьмеричную и шестнадцатеричную формы записи:
hex = OxFF // в десятичной системе соответствует числу 255
oct = 01l //в десятичной системе соответствует числу 9
Если запись числа начинается с нуля, то число понимается как восьмеричное; если в префиксе «Ох», то - как шестнадцатеричное.
Специальные символы (Esc-последовательности)
Как уже сказано, переменной типа char можно присваивать в качестве значения не только алфавитно-цифровой символ, но и такой, который нельзя ввести с клавиатуры - например, символы, посылаемые клавишами «Таb» или «Backspace». Для того, чтобы использовать такие символы в литералах, служат так называемые Esc-последовательности, то есть символ обратного слэша, за которым следует код вводимого символа (табл. 2.3).
Esc-последовательности
в языке Java
Таблица
2.3
char ch;
ch = '\t'; // знак табуляции
ch ='\ ''; // символ апострофа
Строковые литералы
Распространенной разновидностью литерала в языке Java является строка - последовательность символов, заключенная в кавычки:
System.out.println("Это строковый литерал");
А что делать, если внутри самой строки встречается кавычка? Не будет ли она воспринята как символ завершения строки? Будет, если ее не экранировать с помощью Esc-последовательности:
System.out.println("0\'Key"); // строка с апострофом
System.out.println("Строка с \"кавычками\"");
Часто строковые литералы используются для указания пути к некоторому файлу. В ОС Windows символом-разделителем пути служит обратный слэш. Его тоже необходимо экранировать с помощью Esc-последовательности:
String filename = "с:\\project\\helloworld\\HelloWorld.java";
Примечание
В ОС семейства Unix для разделения пути служит прямой слэш (/). Интерпретатор Java позволяет использовать этот символ и на платформе Windows. Рекомендуется для единообразия всегда писать пути через прямой слэш. Экранировать этот символ не нужно.
Следующий пример показывает, как использовать Esc-последовательности для представления специальных символов внутри строки.
Листинг 2.9. Символы форматирования текста
public class StrDemo { public static void main(String[] args) {
// для перевода каретки (начала новой строки)
// служит код \п
System.out.println("Первая строкаХпВторая строка");
// знак табуляции помогает оформить выводимый текст // в колонки. Он вводится с помощью кода \t System.out.println("A\tB\tC");
System.out.println("D\tE\tF");
} // main(String[]) method }
// StrDemo class
