KnigaRead.com/

Н.А. Вязовик - Программирование на Java

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Н.А. Вязовик, "Программирование на Java" бесплатно, без регистрации.
Перейти на страницу:

В Java есть два дробных типа, упомянутые выше, – float и double. Их длина – 4 и 8 байт или 32 и 64 бита, соответственно. Дробный литерал имеет тип float, если он заканчивается на латинскую букву F в произвольном регистре. В противном случае он рассматривается как значение типа double и может включать в себя окончание D или d, как признак типа double (используется только для наглядности).


// float-литералы:

1f, 3.14F, 0f, 1e+5F

// double-литералы:

0., 3.14d, 1e-4, 31.34E45D


В Java дробные числа 32-битного типа float и 64-битного типа double хранятся в памяти в бинарном виде в формате, стандартизированном спецификацией IEEE 754 (полное название – IEEE Standard for Binary Floating-Point Arithmetic, ANSI/IEEE Standard 754-1985 (IEEE, New York)). В этой спецификации описаны не только конечные дробные величины, но и еще несколько особых значений, а именно:


* положительная и отрицательная бесконечности (positive/negative infinity);

* значение "не число", Not-a-Number, сокращенно NaN;

* положительный и отрицательный нули.


Для этих значений нет специальных обозначений. Чтобы получить такие величины, необходимо либо произвести арифметическую операцию (например, результатом деления ноль на ноль 0.0/0.0 является NaN ), либо обратиться к константам в классах Float и Double, а именно POSITIVE_INFINITY, NEGATIVE_INFINITY и NaN. Более подробно работа с этими особенными значениями рассматривается в следующей лекции.

Типы данных накладывают ограничения на возможные значения литералов, как и для целочисленных типов. Максимальное положительное конечное значение дробного литерала:


* для float: 3.40282347e+38f

* для double: 1.79769313486231570e+308


Кроме того, для дробных величин становится важным еще одно предельное значение – минимальное положительное ненулевое значение:


* для float: 1.40239846e-45f

* для double: 4.94065645841246544e-324


Попытка указать литерал со слишком большим абсолютным значением (например, 1e40F ) приведет к ошибке компиляции. Такая величина должна представляться бесконечностью. Аналогично, указание литерала со слишком малым ненулевым значением (например, 1e-350 ) также приводит к ошибке. Это значение должно быть округлено до нуля. Однако если округление приводит не к нулю, то компилятор произведет его сам:


// ошибка, выражение должно быть округлено до 0

0.00000000000000000000000000000000000000000001f

// ошибки нет, компилятор сам округляет до 1

1.00000000000000000000000000000000000000000001f


Стандартных возможностей вводить дробные значения не в десятичной системе в Java нет, однако классы Float и Double предоставляют много вспомогательных методов, в том числе и для такой задачи.

Логические литералы

Логические литералы имеют два возможных значения – true и false. Эти два зарезервированных слова не являются ключевыми, но также не могут использоваться в качестве идентификатора.

Символьные литералы

Символьные литералы описывают один символ из набора Unicode, заключенный в одиночные кавычки, или апострофы ( ASCII -символ single quote, u0027 ). Например:


'a' // латинская буква а

' ' // пробел

'K' // греческая буква каппа


Также допускается специальная запись для описания символа через его код (см. тему "Кодировка"). Примеры:


'u0041' // латинская буква A

'u0410' // русская буква А

'u0391' // греческая буква A


Символьный литерал должен содержать строго один символ, или специальную последовательность, начинающуюся с . Для записи специальных символов (неотображаемых и служебных, таких как ", ', ) используются следующие обозначения:


b u0008 backspace BS – забой

t u0009 horizontal tab HT – табуляция

n u000a linefeed LF – конец строки

f u000c form feed FF – конец страницы

r u000d carriage return CR – возврат каретки

" u0022 double quote " – двойная кавычка

' u0027 single quote ' – одинарная кавычка

\ u005c backslash – обратная косая черта

шестнадцатеричный код от u0000 до u00ff символа в шестнадцатеричном формате.


Первая колонка описывает стандартные обозначения специальных символов, используемые в Java-программах. Вторая колонка представляет их в стандартном виде Unicode -символов. Третья колонка содержит английские и русские описания. Использование в комбинации с другими символами приведет к ошибке компиляции.

Поддержка ввода символов через восьмеричный код обеспечивается для совместимости с С. Например:


'101' // Эквивалентно 'u0041'


Однако таким образом можно задать лишь символы от u0000 до u00ff (т.е. с кодом от 0 до 255), поэтому Unicode -последовательности предпочтительней.

Поскольку обработка Unicode -последовательностей ( uhhhh ) производится раньше лексического анализа, то следующий пример является ошибкой:


'u000a' // символ конца строки


Компилятор сначала преобразует u000a в символ конца строки и кавычки окажутся на разных строках кода, что является ошибкой. Необходимо использовать специальную последовательность:


'n' // правильное обозначение конца строки


Аналогично и для символа u000d (возврат каретки) необходимо использовать обозначение r.

Специальные символы можно использовать в составе как символьных, так и строковых литералов.

Строковые литералы

Строковые литералы состоят из набора символов и записываются в двойных кавычках. Длина может быть нулевой или сколь угодно большой. Любой символ может быть представлен специальной последовательностью, начинающейся с (см. "Символьные литералы ").


"" // литерал нулевой длины

""" //литерал, состоящий из одного символа "

"Простой текст" //литерал длины 13


Строковый литерал нельзя разбивать на несколько строк в коде программы. Если требуется текстовое значение, состоящее из нескольких строк, то необходимо воспользоваться специальными символами n и/или r. Если же текст просто слишком длинный, чтобы уместиться на одной строке кода, можно использовать оператор конкатенации строк +. Примеры строковых литералов:


// выражение-константа, составленное из двух

// литералов

"Длинный текст " +

"с переносом"

/*

* Строковый литерал, содержащий текст

* из двух строк:

* Hello, world!

* Hello!

*/

"Hello, world!rnHello!"


На строковые литералы распространяются те же правила, что и на символьные в отношении использования символов новой строки u000a и u000d.

Каждый строковый литерал является экземпляром класса String. Это определяет некоторые необычные свойства строковых литералов, которые будут рассмотрены в следующей лекции.

Null-литерал

Null- литерал может принимать всего одно значение: null. Это литерал ссылочного типа, причем эта ссылка никуда не ссылается, объект отсутствует. Разумеется, его можно применять к ссылкам любого объектного типа данных. Типы данных подробно рассматриваются в следующей лекции.

Разделители

Разделители – это специальные символы, которые используются в служебных целях языка. Назначение каждого из них будет рассмотрено по ходу изложения курса. Вот их полный список:


( ) [ ] { } ; . ,

Операторы

Операторы используются в различных операциях – арифметических, логических, битовых, операциях сравнения и присваивания. Следующие 37 лексем (все состоят только из ASCII -символов) являются операторами языка Java:


= > < ! ? :

== <= >= != && || ++ --

+ - / & | ^ % << >> >>>

+= -= = = &= |= ^= %= <<= >>= >>>=


Большинство из них вполне очевидны и хорошо известны из других языков программирования, однако некоторые нюансы в работе с операторами в Java все же присутствуют, поэтому в конце лекции приводятся краткие комментарии к ним.

Пример программы

В заключение для примера приведем простейшую программу (традиционное Hello, world!), а затем классифицируем и подсчитаем используемые лексемы:


public class Demo {

/**

* Основной метод, с которого начинается

* выполнение любой Java программы.

*/

public static void main (String args[])

{

System.out.println("Hello, world!");

}

}


Итак, в приведенной программе есть один комментарий разработчика, 7 идентификаторов, 5 ключевых слов, 1 строковый литерал, 13 разделителей и ни одного оператора. Этот текст можно сохранить в файле Demo.java, скомпилировать и запустить. Результатом работы будет, как очевидно:


Hello, world!


Дополнение. Работа с операторами

Рассмотрим некоторые детали использования операторов в Java. Здесь будут описаны подробности, относящиеся к работе самих операторов. В следующей лекции детально рассматриваются особенности, возникающие при использовании различных типов данных (например, значение операции 1/2 равно 0, а 1/2. равно 0.5 ).

Операторы присваивания и сравнения

Во-первых, конечно же, различаются оператор присваивания = и оператор сравнения ==.


x = 1;

// присваиваем переменной x значение 1

x == 1 // сравниваем значение переменной x с

// единицей

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*