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

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

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

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

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

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

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

Ниже приводится новая версия метода sqrtInt, котораяобеспечивает не более чем однократное выделение нового пространства для буфера:String sqrtIntFaster(int i) {StringBuffer buf = new StringBuffer(50);buf.append("sqrt(").append(i).append(')');buf.append(" = ").append(Math.sqrt(i));return buf.toString();}Единственное изменение заключается в том, что на этот раз используется конструктор, который создает достаточно большой объект StringBuffer,способный вместить строку с результатом. Значение 50 несколько превышает максимально необходимое; следовательно, буфер никогда непридется увеличивать заново.Упражнение 8.4Напишите метод для преобразования строк с десятичными числами, при котором после каждой третьей цифры справа ставится запятая.Например, для исходной строки “1542729" метод должен возвращать строку ”1,542,729".Упражнение 8.5Измените метод из предыдущего упражнения так, чтобы при его вызове можно было указать символ-разделитель и количество цифр междуразделителями.Содержание | ДалееГлава 13ПРИМЕНЕНИЕ ТИПОВ В ПРОГРАММИРОВАНИИЯ завернусь в бумагу,Я намажусь клеем.Наклейте мне на голову марку!Я пришлю тебе себя по почте.Вуди Гатри, Почтовая песняТипы в языке Java представлены классами.

Почти для каждого из примитивных типов (int, boolean и т. д.) существует отдельный класс, известныйпод названием “оболочки” (wrapper); кроме того, имеется класс Class, представляющий типы классов и интерфейсов. Такие классы обладаютследующими преимуществами:●●●Полезные статические методы для конкретного типа получают естественное “место жительства”. Например, методы для преобразованиястроки в float являются статическими методами класса Float.То же самое справедливо и для описательных методов и полей. В каждом из классов для примитивных числовых типов присутствуютконстанты MIN_VALUE и MAX_VALUE; с помощью объекта Class можно получить доступ к методам, описывающим супертипы класса.Для значений, относящихся к примитивным типам, можно создавать объекты-оболочки.

Затем эти объекты используются в любомконтексте, где требуется ссылка на класс Object. По этой причине классы для примитивных типов называются классами-оболочками .Иерархия типов для этих классов выглядит следующим образом:Классы для short или byte отсутствуют, поскольку эти типы используются главным образом из соображений экономии памяти. Всеарифметические вычисления для short и byte производятся с выражениями типа int.

Чтобы сохранить значение типа short или byte в объекте,пользуйтесь классом Integer. К сожалению, это также означает, что для типов byte и short отсутствуют константы MIN_VALUE и MAX_VALUE.В данной главе показано, как пользоваться классами-оболочками. В первой части главы рассматриваются объекты Class, которые представляютконкретные классы и интерфейсы. Оставшаяся часть главы посвящена программированию с использованием классов-оболочек дляпримитивных типов.13.1. Класс ClassДля каждого класса и интерфейса в системе имеется представляющий его объект Class.

Этот объект может использоваться для полученияосновных сведений о классе или интерфейсе и для создания новых объектов класса.Класс Class позволяет перемещаться по иерархии типов в программе. Такая иерархия фактически становится частью программной среды, чтооблегчает процесс отладки и автоматического документирования, а также делает программу более последовательной. Кроме того, это открываетновые возможности работы с классами — в первую очередь для создания объектов (их тип может задаваться в виде строки) и вызова классов сиспользованием специальных приемов (например, загрузка по сети).Существует два способа получить объект Class: запросить его у имеющегося объекта методом getClass или искать его по уточненному(включающему все имена пакетов) имени статическим методом Class.forName.Простейшие методы Class предназначены для перемещения по иерархии типов.

Приведенный ниже класс выводит такую иерархию дляконкретного объекта Class:public class TypeDesc {public static void main(String[] args) {TypeDesc desc = new TypeDesc();for (int i = 0; i << args.length; i++) {try {desc.printType(Class.forName(args[i]), 0);} catch (ClassNotFoundException e) {System.err.print(e); // сообщить об ошибке}}// по умолчанию работать со стандартным выводомpublic java.io.PrintStream out = System.out;// используется в printType() для пометки имен типовprivate static String[]basic= { "class","interface"},extended = { "extends", "implements" };public void printType(Class type, int depth) {if (type == null) // супертип Object равен nullreturn;// вывести типfor (int i = o; i << depth; i++)out.print(" ");String[] labels = (depth == 0 ? basic : extended);out.print(labels[type.isInterface() ? 1 : 0] + " ");out.println(type.getName());// вывести интерфейсы, реализуемые классомClass[] interfaces = type.getInterfaces();for (int i = o; i << interfaces.length; i++)printType(interfaces[i], depth + 1);}}// рекурсивный вызов для суперклассаprintType(type.getSuperclass(), depth + 1);Данный пример просматривает имена, введенные в командной строке, и вызывает printType для каждого из них.

Делать это необходимо в tryблоке на тот случай, если класс с заданным именем отсутствует. Ниже показан результат работы программы для класса java.util.Hashtable(используется полное уточненное имя, поскольку этого требует метод forName):class java.util.Hashtableimplements java.lang.Cloneableextends java.lang.Objectextends java.util.Dictionaryextends java.lang.ObjectДалее в тексте программы следует объявление выходного потока.

Для краткости мы объявили его открытым, но в реальном приложении ондолжен быть закрытым, а обращения к нему должны осуществляться только через методы доступа. Затем следует описание двух строковыхмассивов.Метод printType выводит описание своего типа, а затем рекурсивно вызывает себя для распечатки свойств супертипов. Параметр depthпоказывает, на сколько уровней мы поднялись в иерархии типов; в зависимости от его значения каждая строка с описанием снабжаетсясоответствующим отступом.

С каждым новым уровнем рекурсии это значение увеличивается.При выводе типа метод isInterface определяет, является ли тип интерфейсом. Результат вызова используется для выбора префикса —пояснительной надписи. В самом низу иерархии типов, где значение depth равно 0, выводятся надписи “class” и “interface”; типы, находящиесявыше в иерархии, расширяют или реализуют свои исходные типы, поэтому используются термины “extends” и “implements”.

Именно для этого исоздаются массивы Basic и Extended. После выбора нужного префикса имя типа выводится методом getName. Конечно, класс Class содержитметод toString, однако в этом методе уже использован префикс “class” или “interface”. Мы хотим сами контролировать префикс, и потомупришлось создать собственную реализацию метода.После вывода описания типа метод printType осуществляет рекурсивный вызов себя самого. Сначала определяются все интерфейсы,реализуемые исходным типом. /Если тип, для которого выводится информация, представляет собой интерфейс, то он расширяет, а не реализуетсвои интерфейсы-супертипы.

Тем не менее, учет таких подробностей привел бы к неоправданному усложнению кода./ Затем выводитсярасширяемый им суперкласс (если он существует). Постепенно метод доходит до объекта Class класса Object, который не реализует никакихинтерфейсов и для которого метод getSuperClass возвращает null; на этом рекурсия завершается.Упражнение 13.1Модифицируйте TypeDesc, чтобы избежать вывода информации о классе Object.

Эти сведения избыточны, поскольку каждый объект в конечномсчете расширяет класс Object. Используйте ссылку на объект Class для типа Object.Объект Class может воспользоваться методом newInstance для создания нового экземпляра (объекта) представляемого им типа. При этомвызывается безаргументный конструктор класса или возбуждается исключение NoSuch MethodError, если класс не имеет безаргументногоконструктора.

Если класс или безаргументный конструктор недоступны (не являются открытыми или находятся в другом пакете), возбуждаетсяисключение IllegalAccessException. Если класс является абстрактным, или представляет собой интерфейс, или создание завершилось неудачно покакой-то другой причине, возбуждается исключение InstantiationException. Создавать новые объекты подобным образом оказывается удобно,когда вы хотите написать универсальный код и позволить пользователю задать нужный класс.

Например, в программе тестирования алгоритмовсортировки, приведенной в разделе “Проектирование расширяемого класса”, пользователь мог ввести имя тестируемого класса и использоватьего в качестве параметра для вызова forName. Если введенное имя класса окажется допустимым, можно вызвать метод newInstance для созданияобъекта этого типа. Метод main для универсального класса SortDouble выглядит следующим образом:static double[] testData = { 0.3, 1.3e-2. 7.9.

3.17, );public static void main(String[] args) {try {for (int arg = 0; arg << args.length; arg++) {String name = args[arg];Class classFor = Class.forName(name);SortDouble sorter= (SortDouble)classFor.newInstance();SortMetrics metrics= sorter.sort(testData);System.out.println(name + ": " + metrics);for (int i = 0; i << testData.length; i++)System.out.println("\t" + testData[i]);}} catch (Exception e) {System.err.print(e);// сообщить об ошибке}}Этот метод почти совпадает с BubbleSortDouble.main, однако из него исключены все имена типов. Он применим к любому типу, объекты которогомогут использоваться в качестве объектов SortDouble и который содержит безаргументный конструктор.

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