Приложение 2
Новое в
Java 1.1Встроенные классы
Java
Bean-объектМногоязыковая поддержка
Множество новых особенностей, позволяющих
писать программы, которые работают в любой точке
земного шара.
Новая модель обработки событий
Новая модель обработки событий в
графических пользовательских интерфейсах,
предназначенная для того, чтобы облегчить
построение таких интерфейсов.
Другие новые особенности A WT
AWT в Java 1.1 включает в себя поддержку
вывода на печать, операций копирования и вставки,
контекстных меню, клавиш ускоренного вызова
меню, а также операций передачи фокуса. В нем
улучшена поддержка цвета, шрифтов, курсоров,
прокрутки и манипуляции изображениями.
Апплеты
Применение JAR-файлов позволяет
сгруппировать все файлы апплета в единый архив.
Цифровые подписи открывают возможность запуска
апплетов, пользующихся полным доверием
пользователя, в условиях минимальных
ограничений, связанных с безопасностью.
Сериализация объектов
Теперь объекты можно легко сериализовать
для передачи по сети или записи на диск для
постоянного хранения.
Отражение
Программы на Java могут теперь
отражаться (reflection) на самих себя или
на другой класс с целью определения методов и
переменных, заданных в этом классе, аргументов,
передаваемых методам, и т.д. Reflection API
позволяет также вызывать методы по имени.
Безопасность
В Java 1.1 включены новые пакеты,
которые обеспечивают поддержку цифровых
подписей, обработку сообщений, обработку ключей
и списков управления доступом.
Java Database Connectivity (JDBC)
Новый пакет,
позволяющий Java-программам посылать SQL-запросы
серверам баз данных. В его состав входит
"мост", который обеспечивает взаимодействие
с существующими серверами баз данных ODBC.
Удаленный вызов методов
Интерфейс для поддержки распределенных
приложений на Java, в которых
программа, работающая на одном компьютере, может
вызывать методы Java-объектов, хранящихся на
другом компьютере.
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 в ходе обсуждения локальных классов, а инициализаторы экземпляров — при описании анонимных классов.Пустые константы
Мы уже упоминали о том, что локальные переменные,
параметры методов и параметры исключений в
операторе catch можно объявлять как final. Дальнейшее изменение синтаксиса
связано с тем, что для переменных, объявленных
как final, не нужны инициализаторы. В Java 1.0 любая переменная, объявленная как final, должна быть проинициализирована, и
это составляет неотъемлемую часть объявления
переменной. В Java 1.1 такое ограничение
снято. Любая переменная может быть объявлена как final без присвоения ей при этом
начального значения. Таким пустым константам,
конечно же, необходимо присвоить какое-либо
значение до момента их использования. И как
только пустой константе присваивается значение,
оно уже никогда не может быть изменено. Это
позволяет, например, использовать инициализатор
экземпляра или конструктор для вычисления
значения переменной, объявленной как final.
Пустые константы особенно полезны при определении типов данных, предназначенных только для чтения. Они позволяют классу иметь переменные, предназначенные только для чтения, которые инициализируются на основании текущих значений аргументов, передаваемых конструктору. Будучи однажды проинициализированы, эти переменные не могут быть изменены случайно или по злому умыслу.
Анонимные массивы
В Java 1.0 существует возможность
создать и проинициализировать массив с помощью
следующего фрагмента программы:
К сожалению, такой синтаксис можно применять лишь в выражениях инициализации, которые располагаются вслед за объявлением переменной или переменной типа массив. Другими словами, нельзя написать фрагмент программы следующего вида:
int[] а;
а = { 1, 2, 3, 4, 5 }; // Ошибка.
int total = sum( {1, 2, 3, 4, 5} ); // Ошибка.
В
Java 1.1 такая запись также недопустима, но можно написать этот фрагмент программы с применением очень похожего синтаксиса инициализатора массива. При использовании для создания массива оператора new допускается опустить размерность, определяющую количество элементов в массиве, и вместо этого использовать пустые квадратные скобки ( [ ] ), вслед за которыми располагается список значений элементов массива в фигурных скобках. Такое выражение создает массив достаточного размера, чтобы поместить в него все элементы, указанные в фигурных скобках, и инициализирует элементы данного массива значениями, указанными в скобках. Конечно же, все элементы в фигурных скобках должны соответствовать типу, указанному после ключевого слова new.Фрагмент текста программы, в котором используются анонимные массивы, выглядит следующим образом:
int[] а;
а = new int[] {1, 2, 3, 4, 5};
int total = sum(new int[]
(1, 2, 3, 4, 5});
System.out.println(new chart[]
{'h', 'e', 'l', 'l',
'o'));
Как видно из приведенного выше примера, новый синтаксис позволяет создавать и инициализировать массивы без помощи инициализаторов переменных и даже без присвоения массива переменной. Именно поэтому массивы, созданные и проинициализированные таким способом, называют анонимными.
Литералы классов
Другим большим изменением в Java 1.1
является введение Reflection API в пакет java.lang.reflect.
Входящий в состав этого пакета класс java.lang.Class расширен таким
образом, чтобы описывать не только классы
Java, но все типы данных. Иными словами, теперь
существуют специальные объекты Class,
которые соответствуют каждому простому типу Java.
Доступ к этим специальным объектам
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, который применим как для встроенных классов, так и для классов и интерфейсов верхнего уровня.