Изучаем Java
Литералы — это константы, которые записаны по правилам языка Java. Рассмотрим сначала целочисленные литералы. Приведем примеры целочисленных литералов.
111 — десятичное (десятеричное) число
056 — число 46 в восьмеричной форме
0 х АВ — 171 в шестнадцатеричной форме
В языке Java возможны три системы счисления: десятичная (десятеричная), восьмеричная и шестнадцатеричная. Числа в десятичной форме — это числа с основанием 10, числа в восьмеричной форме — это числа с основанием 8, числа в шестнадцатеричной форме — числа с основанием 16. Записи чисел в восьмеричной форме начинаются с 0, далее каждая цифра числа должна быть от 0 до 7. Преобразуются они в десятичные числа так: рассмотрим, например, число 056 в восьмеричной форме. В десятичной форме это число записывается так.
Запись числа в шестнадцатеричной форме начинается с символов 0х, а последующие цифры должны быть от 0 до 15. Поскольку, например, число — это 2 цифры, а нужно записать его одной цифрой, то числа от 10 до 15 записываются буквами от А до f. Рассмотрим правила перехода шестнадцатеричных чисел в десятичные. Возьмем, например, число 0 х АВ. В десятичной форме это число будет записываться так.
10 х 16 + 11 = 171.
Записи числа с типом данных long («длинные целые числа» — об этом далее) обычно имеют на конце символ 1 (чтобы отличить их от целочисленных констант типа int — простых чисел).
Рассмотрим теперь литералы для чисел с плавающей точкой.
Эти литералы, как и целочисленные, могут иметь знаки «+» и (т.е. быть положительными или отрицательными), иметь в записи точку, которая разделяет целую и дробную часть, а также букву е и следом за ней — степень, в которую необходимо возвести число (если степень положительная, знак «+» можно не указывать).
Рассмотрим теперь, как выглядят символьные литералы.
Символьные литералы должны заключаться в одинарные кавычки. Среди символьных литералов есть так называемые еsсаре-последовательности, которые позволяют произвести какую-либо операцию, например, перевести курсор на новую строку или вывести обратную косую черту.
Они представляют собой набор последовательностей вида \uaaaaa, где вместо а могут быть какие-либо символы или числа. Однако есть специальные символы, которые соответствуют еsсаре-последовательностям. Эти специальные символы представлены в табл. 2.1.
Таблица 2.1. Специальные символы, соответствующие еsсаре-последовательностям
Базовые типы данных и литералы Java
В языке Java используются базовые типы данных, значения которых размещаются в стековой памяти (stack). Эти типы обеспечивают более высокую производительность вычислений по сравнению с объектами. Кроме этого, для каждого базового типа имеются классы-оболочки, которые инкапсулируют данные базовых типов в объекты, располагаемые в динамической памяти (heap).
По
умолчанию
Значения
(диапазон или максимум)
–32768..32767
-2147483648..2147483647
922372036854775807L
3.40282347E+38
1.797693134486231570E+308
В Java используются целочисленные литералы, например: 35 – целое десятичное число, 071 – восьмеричное значение, 0х51 – шестнадцатеричное значение. Целочисленные литералы по умолчанию относятся к типу int. Если необходимо определить длинный литерал типа long, в конце указывается символ L (например: 0xffffL). Если значение числа больше значения, помещающегося в int (2147483647), то Java автоматически предполагает, что оно типа long. Литералы с плавающей точкой записываются в виде 1.618 или в экспоненциальной форме 0.112E-05 и относятся к типу double, таким образом, действительные числа относятся к типу double. Если необходимо определить литерал типа float, то в конце литерала следует добавить символ F. Символьные литералы определяются в апострофах (‘a‘, ‘\n‘, ‘\141’, ‘\u005a‘ ). Для размещения символов используется формат Unicode, в соответствии с которым для каждого символа отводится два байта. В формате Unicode первый байт содержит код управляющего символа или национального алфавита, а второй байт соответствует стандартному ASCII коду, как в C++. Любой символ можно представить в виде ‘\ucode‘, где code представляет двухбайтовый шестнадцатеричный код символа. Java поддерживает управляющие символы, не имеющие графического изображения;
‘\n‘– новая строка, ‘\r‘ – переход к началу, ‘\f‘ – новая страница, ‘\t‘– табуляция, ‘\b‘ – возврат на один символ, ‘\uxxxx‘ – шестнадцатеричный символ Unicode, ‘\ddd‘– восьмеричный символ и др. Начиная с J2SE 5.0 используется формат Unicode 4.0. Поддержку четырехбайтным символам обеспечивает наличие специальных методов в классе Character.
К литералам относятся булевские значения true и false, а также null – значение по умолчанию для ссылки на объект. При инициализации строки всегда создается объект класса String – это не массив символов и не строка. Строки, заключенные в двойные апострофы, считаются литералами и размещаются в пуле литералов, но в то же время такие строки представляют собой объекты.
В арифметических выражениях автоматически выполняются расширяющие преобразования типа byte à short à int à long à float à
double. Java автоматически расширяет тип каждого byte или short операнда до int в выражениях. Для сужающих преобразований необходимо производить явное преобразование вида (тип)значение. Например:
byte b = (byte)128; //преобразование int в byte
Указанное в данном примере преобразование необязательно, так как в операциях присваивания литералов при инициализации преобразования выполняются автоматически. При инициализации полей класса и локальных переменных с использованием арифметических операторов автоматически выполняется приведение литералов к объявленному типу без необходимости его явного указания, если только их значения находятся в допустимых пределах, кроме инициализации объектов классов-оболочек. Java не позволяет присваивать переменной значение более длинного типа, в этом случае необходимо явное преобразование типа. Исключение составляют операторы инкремента (++), декремента (–) и сокращенные операторы (+=, /= и т.д.). При явном преобразовании (тип)значение возможно усечение значения.
Имена переменных не могут начинаться с цифры, в именах не могут использоваться символы арифметических и логических операторов, а также символ ‘#’. Применение символов ‘$’ и ‘_’ допустимо, в том числе и в первой позиции имени.
/* пример # 1 : типы данных, литералы и операции над ними :TypeByte.java */
package chapt02;
public class TypeByte <
public static void main(String[] args) <
byte b = 1, b1 = 1 + 2;
final byte B = 1 + 2;
//b = b1 + 1; //ошибка приведения типов
/* b1 – переменная, и на момент выполнения кода b = b1 + 1; может измениться, и выражение b1 + 1 может превысить допустимый размер byte– типа */
b = (byte)(b1 + 1);
b = B + 1; // работает
/* B – константа, ее значение определено, компилятор вычисляет значение выражения B + 1, и если его размер не превышает допустимого для byte типа, то ошибка не возникает */
//b = –b; //ошибка приведения типов
b = (byte) -b;
//b = +b; //ошибка приведения типов
b = (byte) +b;
//b = i; //ошибка приведения типов, int больше чем byte
b = (byte) i;
final int I = 3;
b = I; // работает
/*I –константа. Компилятор проверяет, не превышает ли ее значение допустимый размер для типа byte, если не превышает, то ошибка не возникает */
final int I2 = 129;
//b=I2; //ошибка приведения типов, т.к. 129 больше, чем 127
b = (byte) I2;
b += i++; // работает
b += 1000; // работает
b1 *= 2; // работает
float f = 1.1f;
b /= f; // работает
/* все сокращенные операторы автоматически преобразуют результат выражения к типу переменной, которой присваивается это значение. Например, b /= f; равносильно b = (byte)(b / f); */
Переменная базового типа, объявленная как член класса, хранит нулевое значение, соответствующее своему типу. Если переменная объявлена как локальная переменная в методе, то перед использованием она обязательно должна быть проинициализирована, так как она не инициализируется по умолчанию нулем. Область действия и время жизни такой переменной ограничена блоком <>, в котором она объявлена.
Java Blog
Переменные — это не что иное, как зарезервированные ячейки памяти для хранения значений. Это означает, что когда вы создаете переменную, вы резервируете некоторое место в памяти.
На основе типа данных переменной операционная система выделяет память и решает, что можно сохранить в зарезервированной памяти. Таким образом, назначая переменным разные типы данных, вы можете хранить в этих переменных целые, десятичные дроби или символы.
В Java доступны два типа данных:
- Примитивные типы данных
- Ссылочные/Объектные типы данных
Примитивные типы данных
Java поддерживает восемь примитивных типов данных. Примитивные типы данных предопределены языком и названы ключевым словом.
- Тип данных byte — это 8-битовое знаковое целое число с дополнением до двух.
- Минимальное значение -128 (-2^7)
- Максимальное значение 127 (включительно)(2^7 -1)
- Значение по умолчанию — 0
- Тип данных byte используется для экономии места в больших массивах, в основном вместо int, поскольку byte в четыре раза меньше int.
- Пример: byte a = 100, byte b = -50
- Тип данных short — это 16-битное знаковое целое число с дополнением до двух.
- Минимальное значение -32,768 (-2^15)
- Максимальное значение — 32,767 (включительно) (2^15 -1)
- Тип данных short также может использоваться для экономии памяти как byte тип данных. short в 2 раза меньше int
- Значение по умолчанию — 0.
- Пример: short s = 10000, short r = -20000
- Тип данных int — это 32-битное знаковое целое число с дополнением до двух.
- Минимальное значение — 2,147,483,648 (-2^31)
- Максимальное значение — 2,147,483,647 (включительно) (2^31 -1)
- Целое число (int) обычно используется в качестве типа данных по умолчанию для целых значений, если нет проблем с памятью.
- Значение по умолчанию — 0
- Пример: int a = 100000, int b = -200000
- Тип данных long — это 64-битное целое число с дополнением до двух со знаком.
- Минимальное значение -9,223,372,036,854,775,808(-2^63)
- Максимальное значение — 9,223,372,036,854,775,807 (включительно)(2^63 -1)
- Этот тип используется, когда требуется более широкий диапазон, чем int
- Значение по умолчанию — 0L
- Пример: long a = 100000L, long b = -200000L
- Тип данных float представляет собой 32-битное число с плавающей запятой одинарной точности IEEE 754
- float в основном используется для экономии памяти в больших массивах чисел с плавающей запятой.
- Значение по умолчанию — 0.0f
- Тип данных float никогда не используется для точных значений, таких как валюта
- Пример: float f1 = 234.5f
- Тип данных double — это 64-битный IEEE 754 с плавающей запятой двойной точности
- Этот тип данных обычно используется как тип данных по умолчанию для десятичных значений, обычно это выбор по умолчанию.
- Тип данных double никогда не следует использовать для точных значений, таких как валюта.
- Значение по умолчанию — 0.0d
- Пример: double d1 = 123.4
- boolean тип данных представляет один бит информации
- Возможны только два значения: true и false.
- Этот тип данных используется для простых флагов, которые отслеживают true/false условия.
- Значение по умолчанию — false
- Пример: boolean one = true
- Тип данных char — это один 16-битный символ Unicode
- Минимальное значение — ‘\u0000’ (или 0)
- Максимальное значение — ‘\uffff’ (или 65 535 включительно).
- Тип данных char используется для хранения любого символа
- Пример: char letterA = ‘A’
Ссылочные типы данных
- Ссылочные переменные создаются с использованием определенных конструкторов классов. Они используются для доступа к объектам. Эти переменные объявлены как имеющие определенный тип, который нельзя изменить. Например, Car, Animal и т. д.
- Объекты классов и различные типы переменных массива подпадают под ссылочный тип данных.
- Значение по умолчанию любой ссылочной переменной равно null.
- Ссылочная переменная может использоваться для ссылки на любой объект объявленного типа или любого совместимого типа.
- Пример: Animal animal = new Animal(«cat»);
Литералы Java
Литерал — это представление исходного кода фиксированного значения. Они представлены прямо в коде без каких-либо вычислений.
Литералы могут быть присвоены любой переменной примитивного типа. Например:
byte, int, long и short также могут быть выражены в десятичной (основание 10), шестнадцатеричной (основание 16) или восьмеричной (основание 8) системе счисления.
Префикс 0 используется для обозначения восьмеричного, а префикс 0x указывает шестнадцатеричный при использовании этих систем счисления для литералов. Например:
Строковые литералы в Java указываются, как и в большинстве других языков, путем заключения последовательности символов между парой двойных кавычек. Примеры строковых литералов:
Литералы String и char типов могут содержать любые символы Юникода. Например:
Язык Java также поддерживает несколько специальных escape-последовательностей для литералов String и char.