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

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

PDF-файл К. Арнольд, Д. Гослинг - Язык программирования Java, страница 12 Языки программирования (53641): Книга - 7 семестрК. Арнольд, Д. Гослинг - Язык программирования Java: Языки программирования - PDF, страница 12 (53641) - СтудИзба2019-09-19СтудИзба

Описание файла

PDF-файл из архива "К. Арнольд, Д. Гослинг - Язык программирования Java", который расположен в категории "". Всё это находится в предмете "языки программирования" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст 12 страницы из PDF

Теперь нам не придется переписыватьметод main для каждого алгоритма сортировки — универсальный main годится для всех случаев. Все, что нужно сделать, — выполнить командуjava SortDouble TestClass ...для любого класса-сортировщика (наподобие BubbleSortDouble); класс будет загружен и выполнен.13.2. Загрузка классовRuntime-система Java обращается к классам, когда в этом возникает необходимость. Подробности загрузки классов могут отличаться дляразличных реализаций Java, однако в большинстве случаев используется механизм “пути класса” для поиска компилированного байт-кодакласса, используемого в программе, но не загружавшегося ранее. Во многих случаях этот стандартный механизм работает отлично, однаконемалая часть достоинств Java обусловлена возможностью реализовать загрузку классов с учетом специфики приложения. Чтобы написатьпрограмму, в которой механизм загрузки классов отличается от стандартного, необходимо создать объект ClassLoader, который получает байткоды классов и загружает их во время выполнения программы.Например, вы разрабатываете игру, в которой играющие могут создавать собственные классы, использующие выбранную ими стратегию.

Дляэтого вы создаете абстрактный класс Player, расширяемый игроками для реализации своих идей. Когда игроки будут готовы испытать своюстратегию, они пересылают скомпилированный байт-код класса в вашу систему. Байт-код необходимо загрузить в игру, применить и вернутьигроку его результат (score). Схема выглядит следующим образом:На сервере игровая программа загружает каждый ожидающий своей очереди класс Player, создает объект нового типа и дает ему возможностьпротивопоставить свою стратегию игровому алгоритму. Когда выясняется результат, он сообщается игроку—разработчику стратегии.Механизм коммуникаций здесь не рассматривается, однако он может быть упрощен до сообщений электронной почты, с помощью которыхигроки посылают свои классы и получают результаты.Наибольший интерес представляет процесс загрузки игровой программой скомпилированных классов.

Здесь всем заправляет загрузчик классов.Чтобы создать загрузчик классов, следует расширить абстрактный класс Class Loader и реализовать в подклассе метод loadClass:protected abstract Class loadClass(String name, boolean resolve) throws ClassNotFoundExceptionЗагружает класс с заданным именем name. Если значение resolve равно true, то метод должен вызвать resolveClass, чтобы обеспечить загрузкувсех классов, используемых внутри заданного.В нашем примере мы создадим класс PlayerLoader, предназначенный для чтения байт-кода классов со стратегией игры и подготовки их к работе.Основной цикл будет выглядеть следующим образом:public class Game {static public void main(String[] args) {String name;// имя классаwhile ((name = getNextPlayer()) != null) {try {PlayerLoader loader = new PlayerLoader();ClassclassOf = loader.loadClass(name, true);Playerplayer = (Player)classOf.newInstance();Game game = new Game();player.play(game);game.reportScore(name);} catch (Exception e) {reportException(name, e);}}}}Для каждой новой игры нужен свой объект-загрузчик PlayerLoader; следовательно, новый класс Player не будет смешиваться с классами,загруженными ранее.

Новый PlayerLoader загружает класс и возвращает представляющий его объект Class, который используется для созданиянового объекта класса Player. Затем мы создаем новую игру game и играем в нее. После ее завершения возвращается результат.Класс PlayerLoader расширяет класс ClassLoader и задает собственную реализацию метода loadClass:class PlayerLoader extends ClassLoader {private Hashtable Classes = new Hashtable();public Class loadClass(String name, boolean resolve)throws ClassNotFoundException{try {Class newClass = (Class)Classes.get(name);if (newClass == null) { // еще не определенtry {// проверить, не является// ли системным классомnewClass = findSystemClass(name);if (newClass != null)return newClass;} catch (ClassNotFoundException e) {;// продолжить поиск}// класс не найден - его необходимо загрузитьbyte[] buf = bytesForClass(name);newClass = defineClass(buf, 0, buf.length);Classes.put(name, newClass);}}if (resolve)resolveClass (newClass);return newClass;} catch (IOException e) {throw new ClassNotFoundException(e.toString());}// ...

bytesForClass() и все прочие методы ...}Любая реализация loadClass должна загружать класс лишь в том случае, если это не было сделано ранее, поэтому метод содержит хеш-таблицузагруженных классов. Если класс уже присутствует в ней, то возвращается соответствующий объект Class. В противном случае loadClass сначалапроверяет, можно ли найти класс в локальной системе, для чего вызывает метод find SystemClass класса ClassLoader; этот метод осуществляетпоиск не только среди системных классов (находящихся в пакетах java), но и в пути, заданном для классов.

Если при этом будет найден нужныйкласс, то после выполнения загрузки возвращается соответствующий ему объект Class.Если поиск в обоих случаях заканчивается безрезультатно, необходимо прочитать байт-код класса, для чего служит метод bytesForClass:protected byte[] bytesForClass(String name)throws IOException, ClassNotFoundException{FileInputStream in = streamFor(name);int length = in.available();// получить количество байтовif (length == 0)throw new ClassNotFoundException(name);byte[] buf = new byte[length];in.read(buf);// прочитать байт-кодreturn buf;}В нем использован метод streamFor (не приводится) для получения потока FileInputStream, содержащего байт-код класса. Затем мы создаембуфер нужного размера, считываем весь байт-код и возвращаем буфер.Когда loadClass получает байт-код и вызывается метод defineClass класса ClassLoader, в качестве параметров этот метод получает массив byte,начальное смещение и количество байтов — в указанной части массива должен находиться байт-код класса.

В данном случае байт-код занимаетвесь массив. Когда определение класса завершается, он добавляется в хеш-таблицу Classes, чтобы предотвратить его повторную загрузку.После успешной загрузки класса метод loadClass возвращает новый объект Class.Невозможно выгрузить класс, когда он перестает быть нужным. Вместо этого вы просто прекращаете его использование, чтобы класс-загрузчикмог быть уничтожен сборщиком мусора.Чтобы получить объект-загрузчик для заданного объекта Class, следует вызвать его метод getClassLoader. Процесс загрузки классов былрассмотрен выше. Если у данного класса отсутствует класс-загрузчик, метод возвращает null.Класс-загрузчик применяется лишь на первой стадии подготовки класса к работе.

Всего же существует три стадии:1. Загрузка: получение байт-кода с реализацией класса.2. Компоновка: поиск супертипов класса и загрузка их в случае необходимости.3. Инициализация: присвоение начальных значений статическим полям класса и выполнение их инициализаторов, а также всех статическихблоков.Упражнение 13.2Реализуйте классы Game и Player для какой-нибудь простой игры — например, “крестики-нолики”. Проведите оценку различных реализацийPlayer по данным нескольких запусков.13.3.

Классы-оболочки: общий обзорДля большинства примитивных типов в языке Java существуют классы, представляющие значения данного типа. Эти классы-оболочки обладаютдвумя основными функциями. Первая — в них находятся методы и переменные, относящиеся к типу (например, методы строковыхпреобразований и константы для границ диапазона). Следующий пример показывает, как можно проверить, допустимо ли для данной величинывыполнение быстрых вычислений типа float или же ее диапазон выходит за границы, разрешенные для float:if (value >= Float.MIN_VALUE && value <= Float.MAX_VALUE)return fasterFloatCalc((float)value);elsereturn slowerDoubleCalc(value);Вторая функция заключается в возможности создания объектов, содержащих значения определенного примитивного типа, для универсальныхклассов, умеющих работать только со ссылками на Object.

Например, объекты Hash table могут содержать только ссылки на Object, а не напримитивные типы. Чтобы использовать int в качестве ключа или элемента в объекте Hashtable, необходимо создать объект Integer, содержащийнужное значение:Integer keyObj = new Integer(key);map.put(keyObj, value);В оставшейся части этой главы рассматриваются методы и константы, входящие в классы-оболочки Java. Некоторые из них являются общими длявсех классов, поэтому они будут упомянуты до того, как мы перейдем к конкретным классам.Следующие конструкторы и методы присутствуют во всех классах-оболочках:●●●●●●Конструктор, который получает значение примитивного типа и создает объект класса (например, конструктор Character(char)).Конструктор, который определяет исходное значение объекта по единственному параметру типа St ring.Метод toString, который возвращает строковое представление объекта.Метод typeValue, который возвращает значение примитивного типа — например, Character.charValue или Boolean.booleanValue.Метод equals, который определяет, равны ли между собой объекты, относящиеся к одному классу.Метод hashCode, который возвращает хеш-код, используемый в хеш-таблицах.Эти методы имеются в каждом из классов-оболочек, поэтому они не приводятся в приведенных ниже описаниях для конкретных классов.

Методывыборки и декодирования системных свойств рассматриваются в разделе “Системные свойства” и также отсутствуют в описаниях классов.Термин “основание”, иногда используемый в классах-оболочках, соответствует термину “основание системы счисления”. Например,декодирование значения long по основанию 8 означает то же самое, что и перевод в восьмеричную систему счисления.13.4. Класс BooleanКласс Boolean служит для представления логического типа boolean. Метод valueOf и конструктор со строковым параметром считают, что строка“true” при любом сочетании символов верхнего и нижнего регистра соответствует true; любая другая строка интерпретируется как false.13.5. Класс CharacterКласс Character служит для представления символьного типа char.

Помимо констант MIN_VALUE и MAX_VALUE, он содержит две константыMIN_RADIX и MAX_RADIX, которые равны минимальному и максимальному основанию системы счисления, которые используются методами(описанными ниже) для перевода отдельного цифрового символа в его целочисленный эквивалент и наоборот. Основание должно находиться вдиапазоне 2–36; цифры свыше 9 представлены буквами от A до Z или их эквивалентами в нижнем регистре.public static int digit(char ch, int radix)Возвращает численный эквивалент цифры ch в системе счисления с основанием radix. Если символ не является допустимой цифрой, товозвращается –1.public static char forDigit(int digit, int radix)Возвращает символьное значение заданной цифры в заданной системе счисления.

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