| 
![]() ![]() |
||
|---|---|---|
Приложение2Новое в Java 1.1Встроенные классы Java Bean-объектМеханизм построения модульных программных компонентов, предназначенных для многократного использования. Многоязыковая поддержка Новая модель обработки событий Другие новые особенности A WT Апплеты Сериализация объектов Отражение Безопасность Java Database Connectivity (JDBC) Удаленный вызов методов Java 1.1 : пакет за пакетомПакеты и классы в библиотеке классов Java взаимосвязаны и взаимозависимы. Многие из новых особенностей Java 1.1 базируются на классах, принадлежащих к нескольким различным пакетам Java API. Ниже описывается каждый из 23 пакетов, образующих ядро Java 1.1 API. Здесь представлены новые пакеты, а также рассмотрены изменения, внесенные в имеющиеся пакеты.Java.applet Кроме возможности создавать JAR-файлы и апплеты с цифровой подписью и вводить новые атрибуты в тег <applet>, в пакет java.applet никаких других существенных изменений внесено не было.java.awt В пакете java.awt содержатся новые классы и интерфейсы, предназначенные для поддержки вывода на печать, контекстных меню и клавиш ускоренного вызова меню, а также для обеспечения улучшенной поддержки размещения элементов пользовательского интерфейса на экране, работы с курсорами, полосами прокрутки, цветами и отсечением изображений. В нескольких классах реализована поддержка новой модели обработки событий пакета AWT, хотя большая часть работы с событиями сконцентрирована в одном из нескольких новых пакетов, входящих в пакет java.awt.java.awt.datatransfer Классы и интерфейсы данного пакета образуют фундамент для обмена информацией между приложениями (а также внутри приложения). В этом пакете также содержатся классы, поддерживающие модель передачи информации путем операций копирования и вставки через буфер обмена (clipboard). Можно предполагать, что в будущем пакет будет расширен таким образом, чтобы обеспечить поддержку механизма обмена информацией посредством технологии drag-and-drop. Один из основополагающих механизмов обмена информацией, поддерживаемых данным пакетом, базируется на использовании API сериализации объектов (Object Serialization API) пакета java.io.java.awt.event В данном пакете определены классы и интерфейсы новой модели обработки событий пакета AWT. Классы и интерфейсы этого пакета можно разделить на три категории:
Все события и слушатели событий, определенные в этом пакете, представляют собой расширения класса EventObject или интерфейса Event-Listener, определенные в пакете java.util.j ava.awt.image В этом пакете содержатся два новых класса фильтров изображений, в которых используется улучшенное масштабирование изображений. Также внесены изменения в классы MemoryImageSource и PixelGrabber.java.awt.peer Изменения, внесенные в этот пакет, в основном отражают изменения в java.awt. Например, к ним относятся новые интерфейсы, которые описывают зависящие от платформы контекстные меню и полосы прокрутки.j ava.beans В этом пакете содержится широко разрекламированный JavaBeans API, предназначенный для создания и использования встраиваемых программных компонентов многократного использования. Классы и интерфейсы данного пакета можно применять на трех различных уровнях:
Большинство классов и интерфейсов данного пакета предназначено для разработчиков приложений или более сложных Bean-объектов. Программистам, которые только используют Bean-объекты или разрабатывают простые Bean-объекты, не обязательно изучать большинство особенностей данного пакета. Работа средств построения приложений, применяющих Bean-объекты, базируется на Reflection API, определенном в пакете java.lang.reflect, а во многих Bean-объектах используются преимущества API сериализации объектов (Object Serialization API), определенного в пакете java.io. В JavaBeans API применяется та же модель обработки событий, что и в Java 1.1 AWT, и классы и интерфейсы данного пакета, обеспечивающие обработку событий, являются расширениями соответствующего класса и интерфейса, определенных в пакете java.util.java.io Пакет java.io — самый большой пакет ядра Java на сегодняшний день. Это случилось потому, что в Java 1.1 добавлены следующие компоненты:
java.lang В этом пакете содержится ряд новых семейств типа Exception и Error, а также новые классы Byte, short и Void, с добавлением которых всем простым типам данных Java (включая тип void) соответствуют определенные типы объектов. Это обстоятельство играет большую роль для пакета j ava. lang. reflect, где определяется новый Reflection API. К тому же, существенные изменения, направленные на поддержку работы Reflection API, внесены и в класс Class. В классах Class HClassLoader содержатся методы, обеспечивающие нахождение ресурсов, связанных с данным классом, таких как изображения, аудиофайлы, файлы свойств и т.д. Ресурсы играют важную роль в обеспечении многоязыковой поддержки в Java 1.1.java.lang.reflect Этот новый пакет позволяет программе на Java проверять структуру классов Java и отражать ее на собственную структуру. В java.lang.reflect содержатся классы, которые описывают переменные, методы и конструкторы классов и позволяют программе получить исчерпывающую информацию о любом объекте, массиве, методе, конструкторе или переменной. Пакет java.Beans в огромной степени базируется именно на этом пакете.Java.math В этом новом пакете содержится только два класса, которые поддерживают арифметические операции над целыми числами и над числами с плавающей точкой произвольной точности. В классе Biglnteger определены также методы реализации арифметических операций с модулями чисел, проверки простых чисел и других особенностей, необходимых для криптографии.java.net Изменения, внесенные в пакет java.net, реализованы на достаточно низком уровне. К ним относятся: широковещательные сокеты, опции для сокетов в стиле UNIX, а также исключения новых типов, которые обеспечивают большую глубину детализации при обработке сетевых исключений.java.rmi java.rmi.dgc В этом небольшом пакете определены классы и интерфейсы, которые необходимы для реализации распределенного сбора мусора (DGC — Distributed Garbage Collection).java.rmi.registry Это другой небольшой пакет, в котором определены классы и интерфейсы, необходимые для предоставления клиенту Java возможности осуществлять поиск удаленных объектов по имени или возможности объявления сервером Java услуг, которые он может предоставить пользователю.java.rmi.server Этот пакет является самым большим среди пакетов удаленного вызова методов и представляет собой сердцевину RMI. В нем определены классы и интерфейсы, позволяющие Java-программе создавать объекты, которые могут использоваться удаленно другими Java-программами.java.security В этом пакете содержатся классы и интерфейсы, являющиеся фундаментальными абстракциями элементов криптографии: открытых и закрытых ключей, сертификатов, подтверждений о приеме сообщений и цифровых подписей. В данном пакете отсутствуют реализации таких абстракций. По своему замыслу Java Security API является независящим от реализации. В Java 1.1 отсутствуют реализации по умолчанию, но наряду с этим пакетом можно использовать реализации, осуществляемые продавцом конкретного программного продукта. Базовая реализация механизма безопасности основывается на использовании класса Biglnteger, который определен в пакете java .math.java.security.acl В этом пакете определены интерфейсы высокого уровня и некоторые исключения, предназначенные для работы со списками управления доступом (ACL — access control list).java.security.interfaces В этом пакете определено несколько интерфейсов, которые необходимы для работы схемы безопасности Java Security API, независящей от реализации.java.sql java.text Классы и интерфейсы этого пакета используются для организации многоязыковой поддержки. В пакете содержатся классы, предназначенные для поддержки форматов представления даты, времени, чисел и текстовых сообщений в стилях, которые приняты в местности, назначенной по умолчанию, или в любой заданной местности. В нем также содержатся классы, обеспечивающие сопоставление строк в соответствии с правилами, принятыми в данной местности, и просмотр символов , слов и предложений в строке в соответствии со стилем, принятым в данной местности.java.util Как следует из названия данного пакета, в java.util содержатся вспомогательные классы. В этот пакет в Java 1.1 добавлены новые классы для поддержки моделей обработки событий пакетов AWT и Java Beans, для определения местности (locale) и групп ресурсов (resource bundles), используемых для обеспечения многоязыковой поддержки, а также классы для работы с датой, временем и временными поясами.java.util.zip В этом пакете реализованы классы для расчета контрольных сумм потоков данных, а также для сжатия и архивирования потоков данных с использованием библиотеки сжатия ZLIB и форматов файлов ZIP и GZIP.Другие языковые особенности Java 1.1Хотя введение встроенных классов является самым важным и перспективным изменением языка Java версии 1.1, в язык внесены и некоторые другие изменения. К ним относятся:
Как можно заметить, первые два пункта этого списка представляют собой изменения языка, связанные со встроенными классами, хотя и не относятся только к ним. Локальные переменные и параметры, объявленные как final, рассмотрены в главе 7 в ходе обсуждения локальных классов, а инициализаторы экземпляров — при описании анонимных классов.Пустые константы Пустые константы особенно полезны при определении типов данных, предназначенных только для чтения. Они позволяют классу иметь переменные, предназначенные только для чтения, которые инициализируются на основании текущих значений аргументов, передаваемых конструктору. Будучи однажды проинициализированы, эти переменные не могут быть изменены случайно или по злому умыслу. Анонимные массивы К сожалению, такой синтаксис можно применять лишь в выражениях инициализации, которые располагаются вслед за объявлением переменной или переменной типа массив. Другими словами, нельзя написать фрагмент программы следующего вида: int[] а; В Java 1.1 такая запись также недопустима, но можно написать этот фрагмент программы с применением очень похожего синтаксиса инициализатора массива. При использовании для создания массива оператора new допускается опустить размерность, определяющую количество элементов в массиве, и вместо этого использовать пустые квадратные скобки ( [ ] ), вслед за которыми располагается список значений элементов массива в фигурных скобках. Такое выражение создает массив достаточного размера, чтобы поместить в него все элементы, указанные в фигурных скобках, и инициализирует элементы данного массива значениями, указанными в скобках. Конечно же, все элементы в фигурных скобках должны соответствовать типу, указанному после ключевого слова new.Фрагмент текста программы, в котором используются анонимные массивы, выглядит следующим образом: int[] а; Как видно из приведенного выше примера, новый синтаксис позволяет создавать и инициализировать массивы без помощи инициализаторов переменных и даже без присвоения массива переменной. Именно поэтому массивы, созданные и проинициализированные таким способом, называют анонимными. Литералы классов Доступ к этим специальным объектам Class можно получать через переменную TYPE каждого из классов, описывающих простой тип. Например, статическая переменная Boolean.TYPE содержит объект Class, соответствующий типу данных boolean, а статическая переменная Float.TYPE — объект class, соответствующий типу данных float. Добавлен также новый класс Void, и переменная Void.TYPE соответствует типу void.Все изменения, описанные в данном параграфе, затрагивают лишь библиотеки классов Java, а не сам язык. Однако с этими новшествами связаны и соответствующие изменения в языке. В Java 1.1 можно получить объект class для любого класса или простого типа путем записи имени класса или имени типа с последующим добавлением к нему через точку ключевого слова class. Например, String.class определяет объект Class, который соответствует объекту класса java.lang.String. Аналогичным образом int.class определяет объект специального класса Integer.type, соответствующий типу данных int.В Java 1.0 существует более сложный (и менее эффективный) способ получения объектов Class. Для этого необходимо воспользоваться статическим методом Class.forName():Class с = Class.forName(“java.util.Vector") ; Однако в Java 1.1 можно записать:Class с = java.util.Vector.class; Необходимо помнить о том, что class является в Java ключевым словом, поэтому данный синтаксис не только организует ссылку на статическую переменную, определенную для каждого класса.Новый синтаксис предназначен для упрощения использования новых особенностей, которые появились с добавлением технологии отражения в Java 1.1. Он также необходим в связи с тем, что применение Class.forName() для встроенных классов требует знания способа, который выбрал компилятор для преобразования имен встроенных классов (т.е. того, в каких случаях он заменил . на $). Знания этих правил преобразования необходимы разработчикам компиляторов, однако они не нужны другим программистам, работающим на Java. Таким образом, расширение class обеспечивает получение объекта Сlass, который применим как для встроенных классов, так и для классов и интерфейсов верхнего уровня. | ||
![]() ![]() |
||
| 