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

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

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

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

Для статических полей аналогичный выход состоит в том, чтобы присвоить исходное значениевнутри статического инициализатора, обрабатывающего исключение.5.9.1. Инициализация массивовЧтобы инициализировать массив, следует задать значения его элементов в фигурных скобках после его объявления. Следующее объявлениесоздает и инициализирует объект-массив:String[] dangers = { "Lions", "Tigers", "Bears" };Это равносильно следующему фрагменту:String[] dangers = new String[3];dangers[0] = "Lions";dangers[1] = "Tigers";dangers[2] = "Bears";Для инициализации многомерных массивов может использоваться вложение инициализаторов отдельных массивов.

Приведем объявление, вкотором инициализируется матрица размеров 4x4:double[][] identityMatrix = {{ 1.0, 0.0, 0.0,{ 0.0, 1.0, 0.0,{ 0.0, 0.0, 1.0,{ 0.0, 0.0, 0.0,};0.00.00.01.0},},},},5.10. Приоритет и ассоциативность операторовПриоритетом (precedence) оператора называется порядок, в котором он выполняется по отношению к другим операторам. Различныеоператоры имеют различные приоритеты. Например, приоритет условных операторов выше, чем у логических, поэтому вы можете написатьif (i >>= min && i <<= max)process(i);не сомневаясь в порядке выполнения операторов. Поскольку * (умножение) имеет более высокий приоритет, чем — (вычитание), значениевыражения5*3—3равно 12, а не нулю. Приоритет операторов можно изменить с помощью скобок; например, если бы в предыдущем выражении вам было нужнополучить именно ноль, то для этого достаточно поставить скобки:5 * (3 — 3)Когда два оператора с одинаковыми приоритетами оказываются рядом, порядок их выполнения определяется ассоциативностью операторов.Поскольку + (сложение) относится к лево-ассоциативным операторам, выражениеa+b+cэквивалентно следующему:(a + b) + cНиже все операторы перечисляются в порядке убывания приоритетов.

Все они являются бинарными, за исключением унарных операторов,операторов создания и преобразования типа (также унарных) и тернарного условного оператора. Операторы с одинаковым приоритетомприведены в одной строке таблицы:постфиксные операторы[] . (параметры) expr++ expr—унарные операторы++expr —expr +expr -expr ~ !создание и преобразование типа new (тип)exprоператоры умножения/деления*/%операторы сложения/вычитания+-операторы сдвига<< >> >>>операторы отношения< > >= <= instanceofоператоры равенства== !=поразрядное И&поразрядное исключающее ИЛИ^поразрядное включающее ИЛИ|логическое И&&логическое ИЛИ||условный оператор?:операторы присваивания= += -= *= /= %= >>= <<= >>>= &= ^= |=Все бинарные операторы, за исключением операторов присваивания, являются лево-ассоциативными.

Операторы присваивания являютсяправо-ассоциативными — другими словами, выражение a=b=c эквивалентно a=(b=c).Приоритет может изменяться с помощью скобок. В выражении x+y*z сначала y умножается на z, после чего к результату прибавляется x, тогда какв выражении (x+y)*z сначала вычисляется сумма x и y, а затем результат умножается на z.Присутствие скобок часто оказывается необходимым в тех выражениях, где используется поразрядная логика или присваивание осуществляетсявнутри логического выражения.

В качестве примера рассмотрим следующий фрагмент:while ((v = stream.next()) != null)processValue(v);Приоритет операторов присваивания ниже, чем у операторов равенства; без скобок наш пример был бы равносилен следующему:while (v = (stream.next() != null)) // НЕВЕРНОprocessValue(v);что, вероятно, отличается от ожидаемого порядка вычислений. Кроме того, конструкция без скобок, скорее всего, окажется неверной — онабудет работать лишь в маловероятном случае, если v имеет тип boolean.Приоритет поразрядных логических операторов &, ^ и | также может вызвать некоторые затруднения.

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

Многие программисты склонны злоупотреблять скобками. Старайтесь непользоваться скобками там, где без них можно обойтись — перегруженная скобками программа становится неудобочитаемой и начинаетнапоминать LISP, не приобретая, однако, ни одного из достоинств этого языка.5.11. Порядок вычисленийЯзык Java гарантирует, что операнды в операторах вычисляются слева направо. Например, в выражении x+y+z компилятор вычисляет значениеx, потом значение y, складывает эти два значения, вычисляет значение z и прибавляет его к предыдущему результату.

Компилятор не станетвычислять значение y перед x или z — перед y или x.Такой порядок имеет значение, если вычисление x, y и z имеет некоторый побочный эффект. Скажем, если при этом будут вызываться методы,которые изменяют состояние объекта или выводят что-нибудь на печать, то изменение порядка вычислений отразится на работе программы.Язык гарантирует, что этого не произойдет.Все операнды всех операторов, за исключением &&, || и ?: (см. ниже), вычисляются перед выполнением оператора. Это утверждение оказываетсяистинным даже для тех операций, в ходе которых могут возникнуть исключения.

Например, целочисленное деление на ноль приводит к запускуисключения ArithmeticException, но происходит это лишь после вычисления обоих операндов.5.12. Тип выраженияУ каждого выражения имеется определенный тип. Он задается типом компонентов выражения и семантикой операторов. Если арифметическийили поразрядный оператор применяется к выражению целого типа, то результат будет иметь тип int, если только в выражении не участвуетзначение типа long — в этом случае выражение также будет иметь тип long. Все целочисленные операции выполняются с точностью int или long,так что меньшие целые типы short и byte всегда преобразуются в int перед выполнением вычислений.Если хотя бы один из операндов арифметического оператора относится к типу с плавающей точкой, то при выполнении оператора используетсявещественная арифметика.

Вычисления выполняются с точностью float, если только по крайней мере один из операндов не относится к типуdouble; в этом случае вычисления производятся с точностью double, и результат также имеет тип double.Оператор + выполняет конкатенацию для типа String, если хотя бы один из его операндов относится к типу String или же переменная типа Stringстоит в левой части оператора +=.При использовании в выражении значение char преобразуется в int по-средством обнуления старших 16 бит. Например, символ Unicode \uffffявляется эквивалентом целого значения 0x0000ffff. Несколько иначе рассматривается значение типа short, равное 0xffff, — с учетом знака оноравно –1, поэтому его эквивалент в типе int будет равен 0xffffffff.5.13.

Приведение типовJava относится к языкам с сильной типизацией — это означает, что во время компиляции практически всегда осуществляется проверка насовместимость типов. Java предотвращает неверные присваивания, запрещая все сколько-нибудь сомнительные операции, и поддерживаетмеханизм приведения типов для тех случаев, когда совместимость может быть проверена только во время выполнения программы. Мы будемрассматривать приведение типов на примере операции присваивания, но все сказанное относится и к преобразованиям внутри выражений, и кприсваиванию значений параметрам методов.5.13.1. Неявное приведение типовНекоторые приведения типов происходят автоматически, без вмешательства с вашей стороны.

Существует две категории неявных приведений.Первая категория неявных приведений типа относится к примитивным значениям. Числовой переменной можно присвоить любое числовоезначение, входящее в допустимый диапазон данного типа. Тип char может использоваться всюду, где допускается использование int. Значение сплавающей точкой может быть присвоено любой переменной с плавающей точкой, имеющей ту же или большую точность.Java также поддерживает неявные приведения целых типов в типы с плавающей точкой, но не наоборот — при таком переходе не происходитпотери значимости, так как диапазон значений с плавающей точкой шире, чем у любого из целых типов.Сохранение диапазона не следует путать с сохранением точности. При некоторых неявных преобразованиях возможна потеря точности.Например, рассмотрим преобразование long в float.

Значения float являются 32-разрядными, а значения long — 64-разрядными. float содержитменьше значащих цифр, чем long, даже несмотря на то, что этот тип способен хранить числа из большего диапазона. Присваивание значенияlong переменной типа float может привести к потере данных. Рассмотрим следующий фрагмент:long orig = 0x7effffffffffffffL;float fval = orig;long lose = (long)fval;System.out.println("orig = " + orig);System.out.println("fval = " + fval);System.out.println("losw = " + lose);Первые два оператора создают значение long и присваивают его переменной float.

Чтобы продемонстрировать, что при этом происходит потеряточности, мы производим явное приведение fval к long и присваиваем значение другой переменной (явное приведение типов рассматриваетсяниже). Результаты, выводимые программой, позволяют убедиться в том, что значение float потеряло часть своей точности, так как значениеисходной переменной orig типа long отличается от того, что было получено при явном обратном приведении значения переменной fval к типуlong:orig = 9151314442816847871fval = 9.15131e+18lose = 9151314442816847872Второй тип неявного приведения — приведение по ссылке. Объект, относящийся к некоторому классу, включает экземпляры каждого изсупертипов.

Вы можете использовать ссылку на объект типа в тех местах, где требуется ссылка на любой из его супертипов.Значение null может быть присвоено ссылке на объект любого типа, в том числе и ссылке на массив.5.13.2. Явное приведение и instanceofКогда значение одного типа не может быть присвоено переменной другого типа посредством неявного приведения, довольно часто можновоспользоваться явным приведением типов (cast). Явное приведение требует, чтобы новое значение нового типа как можно лучшесоответствовало старому значению старого типа. Некоторые явные приведения недопустимы (вы не сможете преобразовать boolean в int),однако разрешается, например, явное приведение double к значению типа long, как показано в следующем фрагменте:double d = 7.99;long l = (long)d;Когда значение с плавающей точкой преобразуется к целому типу, его дробная часть отбрасывается; например, (int)-72.3 равняется –72.

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

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

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

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