Главная » Просмотр файлов » К. Арнольд, Д. Гослинг - Язык программирования Java

К. Арнольд, Д. Гослинг - Язык программирования Java (1160779), страница 21

Файл №1160779 К. Арнольд, Д. Гослинг - Язык программирования Java (К. Арнольд, Д. Гослинг - Язык программирования Java) 21 страницаК. Арнольд, Д. Гослинг - Язык программирования Java (1160779) страница 212019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 21)

Например, если бы существовало дваметода doppelgänger, которые бы отличались только тем, что один из них возвращает int, а другой — short, то отдать предпочтение одному изних в следующем операторе было бы невозможно:double d = doppelgänger();Аналогичная проблема существует и для исключений, поскольку любое их количество (а также все или ни одно) может быть перехвачено вофрагменте программы, вызывающем перегруженный метод. Вам не удастся определить, какой из двух методов должен вызываться, если ониотличаются только возбуждаемыми исключениями.5.15. Арифметические операторыJava поддерживает семь арифметических операторов, которые работают с любыми числовыми типами:+ сложение- вычитание* умножение/ деление% остатокJava также поддерживает унарный минус (-) для изменения знака числа.

Знак может быть изменен оператором следующего вида:val = -val;Кроме того, имеется и унарный плюс — например, +3. Унарный плюс включен для симметрии, без него было бы невозможно записыватьконстанты вида +2.0.5.15.1. Целочисленная арифметикаЦелочисленная арифметика выполняется с дополнением по модулю 2 — то есть при выходе за пределы своего диапазона допустимых значений(int или long) величина приводится по модулю, равному величине диапазона. Таким образом, в целочисленной арифметике никогда непроисходит переполнения, встречаются лишь выходы значения за пределы диапазона.При целочисленном делении происходит округление по направлению к нулю (то есть 7/2 равно 3, а –7/2 равно –3).

Деление и остаток для целыхтипов подчиняются следующему правилу:(x/y)*y + x%y == xСледовательно, 7%2 равно 1, а –7%2 равно –1. Деление на ноль или нахождение остатка от деления на 0 в целочисленной арифметике недопускается и приводит к запуску исключения ArithmeticException.Арифметические операции с символами представляют собой целочисленные операции после неявного приведения char к типу int.5.15.2. Арифметика с плавающей точкойДля работы с плавающей точкой (как для представления, так и для совершения операций) в Java используется стандарт IEEE 7541985. Всоответствии с ним допускаются как переполнение в сторону бесконечности (значение превышает максимально допустимое для double илиfloat), так и вырождение в ноль (значение становится слишком малым и неотличимым от нуля для double или float).

Также имеется специальноепредставление NaN (“Not A Number”, то есть “не-число”) для результатов недопустимых операций — например, деления на ноль.Арифметические операции с конечными операндами работают в соответствии с общепринятыми нормами. Знаки выражений с плавающейточкой также подчиняются этим правилам; перемножение двух чисел с одинаковым знаком дает положительный результат, тогда как приперемножении двух чисел с разными знаками результат будет отрицательным.Сложение двух бесконечностей с одинаковым знаком дает бесконечность с тем же знаком. Если знаки различаются — ответ равен NaN.Вычитание бесконечностей с одинаковым знаком дает NaN; вычитание бесконечностей с разными знаками дает бесконечность, знак которойсовпадает со знаком левого операнда.

Например, (-(-)) равно . Результат любой арифметической операции, в которой участвует величина NaN,также равен NaN. При переполнении получается бесконечность с соответствующим знаком, а при вырождении — ноль с соответствующимзнаком. В стандарте IEEE имеется отрицательный ноль, который равен +0.0, однако 1f/0f равно положительной бесконечности, а 1f/-0f равноотрицательной бесконечности.Если -0.0 == 0.0, как же отличить отрицательный ноль, полученный в результате вырождения, от положительного? Его следует использовать ввыражении, в котором участвует знак, и проверить результат.

Например, если значение x равно отрицательному нулю, то выражение 1/x будетравно отрицательной бесконечности, а если положительному — то положительной бесконечности.Операции с бесконечностями выполняются по стандартным математическим правилам. Сложение (или вычитание) конечного числа с любойбесконечностью также дает бесконечность. Например, (-+x) дает - для любого конечного x.Бесконечность может быть получена за счет соответствующей арифметической операции или использования имени бесконечности для объектовтипа float или double: POSITIVE_INFINITY или NEGATIVE_INFINITY. Например, Double.NEGATIVE_INFINITY представляет значение отрицательнойбесконечности для объектов типа double.Умножение бесконечности на ноль дает в результате NaN.

Умножение бесконечности на ненулевое конечное число дает бесконечность ссоответствующим знаком.Деление, а также деление с остатком может давать бесконечность или NaN, но никогда не приводит к исключениям. В таблице перечисленырезультаты арифметических операций при различных значениях операндов:xyКонечное±0.0Конечное±0.0x/y±0.0x%yNaN±0.0xNaNNaNКонечноеNaNNaNNaNВо всех остальных отношениях нахождение остатка при делении с плавающей точкой происходит аналогично нахождению целочисленногоостатка.

Вычисление остатка методом Math.IEEERemainder описано в разделе 14.8.5.15.3. Арифметика с плавающей точкой и стандарт IEEE-754Арифметика с плавающей точкой в языке Java представляет собой подмножество стандарта IEEE-754-1985. Тем читателям, которым необходимополное понимание всех связанных с этим аспектов, следует обратиться к спецификации языка Java “The Java Language Specification”. Вот краткаясводка ключевых отличий:●●●●Непрерываемая арифметика: в Java отсутствуют какие-либо исключения или иные события, сигнализирующие об исключительныхсостояниях в смысле IEEE: деление на ноль, переполнение, вырождение или потеря точности.

В арифметике Java не предусмотрены какиелибо действия при появлении значения NaN.Округление: в арифметике Java происходит округление к ближайшему — неточный результат округляется к ближайшему представимомузначению; при наличии двух одинаково близких значений предпочтение отдается тому, у которого младший бит равен 0. Этосоответствует стандарту IEEE. Однако при преобразовании числа с плавающей точкой к целому в Java происходит округление понаправлению к нулю.

Java не допускает выбираемых пользователем режимов округления для вычислений с плавающей точкой:округления вверх, вниз или по направлению к нулю.Условные операции: в арифметике Java отсутствуют реляционные предикаты, которые бы реализовывали понятие упорядоченности, заисключением !=. Тем не менее все возможные случаи, кроме одного, могут быть смоделированы программистом с использованиемсуществующих операций отношения и логического отрицания. Исключением является отношение “упорядочено, но не равно”, котороепри необходимости может быть представлено в виде x<y || x>y.Расширенные форматы: арифметика Java не поддерживает никаких расширенных форматов, за исключением того, что double можетвыступать в качестве расширения формата с одинарной точностью. Наличие других расширенных форматов не является требованиемстандарта.5.15.4. Конкатенация строкОператор + может применяться для конкатенации строк.

Приведем пример:String boo = "boo";String cry = boo + "hoo";cry += "!";System.out.println(cry);А вот как выглядит результат работы:boohoo!Оператор + также используется для конкатенации объектов типа String со строковым представлением любого примитивного типа или объекта.Например, следующий фрагмент заключает строку в кавычки-“елочки” (guillemet characters), которые используются для цитирования во многихевропейских языках:public static String guillemete(String quote) {return '"' + quote + '"';}Неявное преобразование примитивных типов и объектов в строки происходит лишь при использовании + или += в выражениях со строками — инигде более. Например, методу, вызываемому с параметром типа String, нужно передавать именно String — вы не сможете передать объект илиfloat и рассчитывать на его неявное преобразование.5.16.

Операторы приращения и уменьшенияОператоры ++ и — применяются соответственно для приращения и уменьшения значений. Выражение i++ эквивалентно i = i + 1, если не считатьтого, что в первом случае i вычисляется всего один раз. Например, операторarr[where()]++;всего один раз вызывает метод where и использует результат в качестве индекса массива.

С другой стороны, в оператореarr[where()] = arr[where()] + 1;метод where будет вызываться дважды: один раз при вычислении правостороннего индекса, а во второй раз — при вычислении левостороннегоиндекса. Если при каждом вызове where возвращается новое значение, результат будет отличаться от приведенного выше выражения, в которомиспользован оператор ++.Операторы приращения и уменьшения могут быть либо префиксными, либо постфиксными — то есть стоять либо до, либо после своегооперанда.

Если оператор стоит перед операндом (префикс), то операция приращения/уменьшения выполняется до возвращения результатавыражения. Если же оператор стоит после (постфикс), то операция выполняется после использования результата. Пример:class IncOrder {public static void main(String[] args) {int i = 16;System.out.println(++i + " " + i++ + " " + i);}}Результат работы будет выглядеть так:17 17 18Первое выведенное значение равно i после выполнения префиксного приращения до 17; второе значение равно i после этого приращения, нодо выполнения следующего, постфиксного приращения до 18; наконец, значение i выводится после его постфиксного приращения в серединеоператора вывода.Операции приращения и уменьшения ++ и — могут применяться к переменным типа char для получения следующего или предыдущего символав кодировке Unicode.5.17.

Операторы отношения и условный операторВ Java имеется стандартный набор операторов отношения и условных операторов:> больше>= больше или равно< меньше<= меньше или равно== равно!= не равноВсе эти операторы возвращают логические значения. Унарный оператор ! инвертирует логическую величину, и, следовательно, !true — это то жесамое, что и false. Проверка логических величин обычно производится непосредственно — если x и y относятся к логическому типу, то считаетсяболее изящным написатьif (x || !y) {// ...}нежелиif (x == true || y == false) {// ...}Результаты логических операций могут объединяться посредством операторов && и ||, которые означают “логическое И” и “логическое ИЛИ”соответственно. По возможности эти операторы стараются обойтись без вычисления своего второго операнда.

Например:if (w && x) {// внешнее "если"if (y || z) { // внутреннее "если"// ...// тело внутреннего "если"}}Внутреннее “если” выполняется лишь в том случае, если оба значения (w и x) равны true. Если w равно false, то Java не станет вычислять x. Теловнутреннего “если” выполняется, если хотя бы одно из значений, y или z, равно true. Если y равно true, то Java не вычисляет z.Это правило часто используется во многих программах на Java для обеспечения правильности или эффективности работы.

Например, данныйметод делает безопасным следующий фрагмент:if (ix >>= 0 && ix << array.length && array[ix] != 0) {// ...}Сначала выполняется проверка диапазона — только в том случае, если переменная x лежит в допустимых пределах, она будет использована длядоступа к элементу массива array.С логическими значениями используются только операторы равенства == и !=, поскольку вопрос о том, что больше — true или false — являетсябессмысленным.Данное обстоятельство может использоваться для имитации “логического исключающего ИЛИ”.

Характеристики

Тип файла
PDF-файл
Размер
1,1 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6361
Авторов
на СтудИзбе
310
Средний доход
с одного платного файла
Обучение Подробнее