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

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

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

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

В отличие отконструкторов, вы также должны объявить возвращаемый методом тип после закрывающей скобки в сигнатуре. Возвращаемый тип указываетсяс использованием тех же сокращений, что и для типа параметров, с дополнительной буквой V для void. Примеры приведены ниже. Вы должнысами привести тип long к возвращаемому типу метода или проигнорировать его для методов типа void.Для получения структуры класса, используемой при вызове статических методов, применяется одна из двух функций FindClass:ClassClass *FindClass(ExecEnv *ee, char *class_name, bool_t resolve)Возвращает указатель на структуру ClassClass для заданного класса. Как и прежде, параметр типа ExecEnv следует получить отфункции EE.

Логическая величина resolve аналогична одноименному параметру, используемому методом ClassLoader.loadClass вразделе 13.2.ClassClass *FindClassFromClass(ExecEnv *ee, char *class_name, bool_t resolve, ClassClass *from)Возвращает указатель на объект-класс для заданного класса с использованием объекта ClassLoader класса from.Приведем пример, в котором метод System.out.println() вызывается для вывода сведений о работе родного метода.

Статический родной методgrindAway класса Crunch, приведенный ниже, осуществляет некоторые трудоемкие вычисления и возвращает результат типа double:doubleCrunch_grindAway(struct HCrunch *this_h){ClassClass *myClass;HObject *out;long i;double result;ExecEnv *ee = EE(); /* используется в нескольких местах */}myClass = FindClass(ee, "Crunch", TRUE);out = (HObject *)execute_java_static_method(ee, myClass,"outStream", "()Ljava/io/PrintStream;");if (exceptionOccurred(ee))return 0.0;for (i = 0; i << NUM_PASSES; i++) {execute_java_dynamic_method(ee, out,"println", "(I)V", i);if (exceptionOccurred(ee))return 0.0; // необходимо что-то вернуть/* ..

вычисления ... */}return result;Во фрагменте программы, предшествующем циклу, мы получаем дескриптор объекта java.io.PrintStream для System.out. Мы не можемнепосредственно использовать значение статического поля System.out, потому что статические поля не имеют своего представления в родныхметодах; из-за этого приходится прибегать к обходным маневрам. В данном случае мы создаем статический метод, возвращающий нужноезначение, и вызываем его из родного метода:public static java.io.PrintStream outStream() {return System.out;}Родной код должен получить указатель на структуру ClassClass для класса Crunch, поэтому мы вызываем FindClass. После этого можно вызватьфункцию execute_java_static_method с указанием имени вызываемого метода и его сигнатуры, включающей тип возвращаемого значения.

Мыпреобразуем возвращаемое значение long к типу, необходимому для конкретного метода. В данном случае нам требуется общий дескрипторHObject, а не дескриптор для конкретного типа java.io.PrintStream.После вызова метода проверяется, не было ли возбуждено исключение. Это стоит делать после каждого вызова метода или конструктора Java изродного кода, поскольку в противном случае вы можете пропустить исключение и иметь неприятности в будущем.

Если мы выходим из функциипо причине возникновения исключения, то возвращается фиктивное значение, которое игнорируется программой.После того, как получен доступ к выходному потоку, можно начинать циклические вычисления. При проходе каждого цикла его номер выводитсяметодом System.out.println. Для вызова этого метода мы используем функция execute_java_dynamic_method, передавая ей в качестве параметровобъект, для которого вызывается метод, имя метода, его сигнатуру и аргументы. Нам нужна версия println, получающая аргумент типа int; этотметод имеет тип void, поэтому мы используем сигнатуру " (I)V" и передаем целое число, которое нужно вывести (i) после аргумента-сигнатуры.

Иснова при возврате из метода необходимо проверить, не возбуждено ли исключение.Для многих типов, возвращаемых методами Java, приведение long к нужному типу происходит элементарно. Однако типы double и long в Javaявляются 64-разрядными, тогда как в большинстве существующих компиляторов C тип long 32-разрядный, и поэтому возвращаемое значениебудет иметь только половинную длину. Хотя существуют различные способы получения всех 64 бит возвращаемого значения, о них не говоритсяв этой книге из-за их машинной зависимости.А.8 Последнее предупреждениеМы должны снова предупредить вас о том, что конкретная схема стыковки, описанная здесь, в будущем обязательно изменится. Улучшения могутпроизойти как в плане реализации, так и на концептуальном уровне.

Схема стыковки с C++ будет обладать другими характеристиками, и,возможно, повлечет за собой изменения в схеме стыковки с C, сохраняя, однако, совместимость. Кроме того, создатели будущих сред разработкимогут вообще отказаться от использования всех принципов, примененных в данной схеме. Мы надеемся, что в любом случае приведенный здесьматериал поможет вам понять некоторые общие аспекты, возникающие при стыковке различных языков программирования, и освоить схемусвязывания родных методов, которая будет использоваться в вашей системе.Содержание | ДалееПриложение БRuntime-исключения в JavaКомпьютер не бывает эмоциональным. Он может дать точное математическое описание, но забудет об интонации.Фрэнк ЗаппаRuntime-система Java возбуждает исключения двух основных видов: runtime-исключения, расширяющие класс RuntimeException, и ошибки,которые расширяют класс Error.

Исключения обоих видов являются непроверяемыми (см. раздел 7.3). Верхняя часть иерархии исключенийвыглядит следующим образом:Исключения Error сигнализируют об очень серьезных проблемах, после которых программа обычно завершается, и которые никогда (или почтиникогда) не должны перехватываться. Исключения Error не являются расширениями RuntimeException, так что программист, пытающийсянаписать универсальное условие catch для перехвата всех исключений Exception и RuntimeException (обычно делать этого не следует) не сможетперехватить исключения Error. Разумеется, после возникновения любого исключения будут выполнены условия finally операторов try, так как всеисключения, в том числе и Error, просматривают стек вызовов.

Следовательно, вы всегда сможете выполнить необходимые завершающиедействия.Программист может самостоятельно расширить классы RuntimeException и Error, чтобы создать свои собственные варианты непроверяемыхисключений — то есть таких исключений, которые можно возбуждать без указания их в условии throws. Мы сообщаем об этом по единственнойпричине — чтобы вы знали, что этого делать не следует. Условие throws предусмотрено именно для того, чтобы при вызове метода были виднывсе возможные аспекты его поведения. Порождая свое исключение от RuntimeException или Error, вы сообщаете о нем ложные сведения (будтооно запускается runtime-системой). Кроме того, другие разработчики, читающие вашу программу, полагают, что условие throws дает иминформацию о возможном поведении вашего метода; вы нарушаете это предположение.Даже если вы пишете программу для своего собственного использования, не стоит создавать непроверяемые исключения: программисты, неполностью понимающие работу вашего кода, могут упустить нечто важное.

Кроме того, вероятно, что через несколько месяцев после написанияпрограммы именно вы окажетесь тем человеком, который будет изменять ее без полного понимания происходящего. Одно из правил созданияпонятных программ — считать классы RuntimeException и Error нерасширяемыми.Все классы Error и RuntimeException содержат по меньшей мере два конструктора: один вызывается без аргументов, а второй получает объектString с описанием. Исключения, которые прямо или косвенно расширяют RuntimeException или Error, не объявляются в условии throws, посколькуони могут произойти в любой момент, что делает их объявление излишним.Исключение CloneNotSupportedException непосредственно порождается от класса Exception, поскольку каждая программа, которая вызываетметод clone, возбуждающий данное исключение, должна явным образом его обработать.

Оно рассмотрено в разделе “Дублирование объектов.Настоящая глава делится на две части — одна посвящена классам RuntimeException, а другая — классам Error. Для каждого исключенияприводится его значение, описание ситуации, в которой оно возбуждается, а также все дополнительные конструкторы.Б.1 Классы RuntimeExceptionArithmeticException extends RuntimeExceptionВозникла исключительная ситуация во время вычислений (например, деление целого числа на ноль).ArrayStoreException extends RuntimeExceptionПопытка сохранения в массиве объекта неверного типа.ClassCastException extends RuntimeExceptionПопытка недопустимого приведения типа.IllegalArgumentException extends RuntimeExceptionМетод получил неверный аргумент (например, метод String.equals вызван для объекта, который не относится к типу String).IllegalMonitorStateException extends RuntimeExceptionМеханизм wait/notify использован за пределами синхронного кода.IllegalThreadStateException extends IllegalArgumentExceptionСостояние потока не допускает выполнения требуемой операции.IndexOutOfBoundsException extends RuntimeExceptionRuntime-система генерирует это исключение при выходе индекса массива или объекта String за пределы диапазона допустимыхзначений.NegativeArraySizeException extends RuntimeExceptionПопытка создания массива отрицательного размера.NullPointerException extends RuntimeExceptionДля доступа к полю или методу использована null-ссылка.

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

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

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

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