stringtranslate.com

Платформа Java, стандартная версия

Java Platform, Standard Edition ( Java SE ) — это вычислительная платформа для разработки и развертывания переносимого кода для настольных и серверных сред. [1] Java SE ранее была известна как платформа Java 2 Standard Edition ( J2SE ).

Платформа использует язык программирования Java и является частью семейства программных платформ Java . Java SE определяет ряд API -интерфейсов общего назначения , таких как API-интерфейсы Java для библиотеки классов Java , а также включает спецификацию языка Java и спецификацию виртуальной машины Java . [2] OpenJDK является официальной эталонной реализацией , начиная с версии 7. [3] [4] [5]

Номенклатура, стандарты и спецификации

Платформа была известна как Java 2 Platform, Standard Edition или J2SE с версии 1.2, пока название не было изменено на Java Platform, Standard Edition или Java SE в версии 1.5. «SE» используется для отличия базовой платформы от платформ Enterprise Edition ( Java EE ) и Micro Edition ( Java ME ). «2» изначально предназначалось для того, чтобы подчеркнуть основные изменения, внесенные в версию 1.2, но было удалено в версии 1.6. Соглашение об именах менялось несколько раз за историю версий Java . Начиная с J2SE 1.4 (Merlin), Java SE разрабатывается в рамках процесса сообщества Java , который создает описания предлагаемых и окончательных спецификаций для платформы Java, называемые запросами спецификации Java (JSR) . [6] JSR 59 была базовой спецификацией для J2SE 1.4, а JSR 176 определяла J2SE 5.0 (Tiger). Java SE 6 (Mustang) была выпущена под номером JSR 270.

Платформа Java Enterprise Edition (Java EE) — это связанная спецификация, включающая все классы Java SE, а также ряд классов, которые более полезны для программ, работающих на серверах , а не на рабочих станциях .

Платформа Java, Micro Edition (Java ME) — это связанная спецификация, предназначенная для предоставления сертифицированного набора API-интерфейсов Java для разработки программного обеспечения для небольших устройств с ограниченными ресурсами, таких как сотовые телефоны , КПК и телеприставки .

Среда выполнения Java (JRE) и комплект разработки Java (JDK) — это фактические файлы, загружаемые и устанавливаемые на компьютер для запуска или разработки программ Java соответственно.

Пакеты общего назначения

java.lang

Пакет Java java.lang содержит фундаментальные классы и интерфейсы, тесно связанные с языком и системой времени выполнения . Сюда входят корневые классы, формирующие иерархию классов , типы, привязанные к определению языка, базовые исключения , математические функции, многопоточность , функции безопасности, а также некоторая информация о базовой собственной системе. Этот пакет содержит 22 из 32 Errorклассов, представленных в JDK 6.

Основные классы и интерфейсы java.lang:

Классы java.langавтоматически импортируются в каждый исходный файл .

java.lang.ref

Пакет java.lang.refпредоставляет более гибкие типы ссылок , чем доступные в противном случае, что позволяет ограниченное взаимодействие между приложением и сборщиком мусора виртуальной машины Java (JVM) . Это важный пакет, достаточно важный для языка, чтобы разработчики языка могли дать ему имя, начинающееся с «java.lang», но он в некоторой степени специализированный и не используется многими разработчиками. Этот пакет был добавлен в J2SE 1.2.

Java имеет выразительную систему ссылок и допускает особое поведение при сборке мусора. Обычная ссылка в Java называется «сильной ссылкой». Пакет java.lang.refопределяет три других типа ссылок — мягкие, слабые и фантомные ссылки. Каждый тип ссылки предназначен для конкретного использования.

Каждый из этих ссылочных типов расширяет Referenceкласс, который предоставляет get() метод для возврата строгой ссылки на ссылочный объект (или, nullесли ссылка была очищена, или если ссылочный тип является фантомным), а также метод clear()для очистки ссылки.

Также определяется java.lang.refкласс ReferenceQueue, который можно использовать в каждом из обсуждавшихся выше приложений для отслеживания объектов, изменивших ссылочный тип. При Referenceсоздании он дополнительно регистрируется в ссылочной очереди. Приложение опрашивает очередь ссылок, чтобы получить ссылки, которые изменили состояние доступности.

java.lang.reflect

Отражение — это составная часть Java API, которая позволяет коду Java проверять и «размышлять» над компонентами Java во время выполнения и использовать отраженные члены. Классы в java.lang.reflectпакете вместе с такими приложениями, java.lang.Classкак java.lang.Packageотладчики , интерпретаторы , инспекторы объектов, браузеры классов и службы, такие как сериализация объектов и JavaBeans , которым необходим доступ либо к общедоступным членам целевого объекта (на основе его класса времени выполнения), либо к ним. члены, объявленные данным классом. Этот пакет был добавлен в JDK 1.1.

Отражение используется для создания экземпляров классов и вызова методов с использованием их имен — концепция, позволяющая осуществлять динамическое программирование. Классы, интерфейсы, методы, поля и конструкторы можно обнаружить и использовать во время выполнения. Отражение поддерживается метаданными , которые JVM имеет о программе.

Техники

Существуют основные приемы рефлексии:

Открытие

Обнаружение обычно начинается с объекта и вызова Object.getClass()метода для получения объекта Class. Объект Classимеет несколько методов для обнаружения содержимого класса, например:

Использовать по имени

Объект Classможно получить либо путем обнаружения, используя литерал класса (например, MyClass.class), либо используя имя класса (например, Class.forName("mypackage.MyClass")). С помощью Classобъектаmember Method, Constructorили Fieldобъекты можно получить, используя символическое имя члена. Например:

Method, Constructorи Fieldобъекты можно использовать для динамического доступа к представленному члену класса. Например:

Массивы и прокси

Пакет java.lang.reflectтакже предоставляет Arrayкласс, содержащий статические методы для создания и управления объектами массива, а начиная с J2SE 1.3 — Proxyкласс, поддерживающий динамическое создание прокси-классов, реализующих указанные интерфейсы.

Реализация класса Proxyобеспечивается предоставленным объектом, реализующим интерфейс InvocationHandler. Метод InvocationHandler's invoke(Object, Method, Object[])вызывается для каждого метода, вызванного в прокси-объекте: первый параметр — это прокси-объект, второй параметр — это объект, Methodпредставляющий метод из интерфейса, реализованного прокси, а третий параметр — это массив переданных параметров. к методу интерфейса. Метод invoke()возвращает Objectрезультат, содержащий результат, возвращенный коду, вызвавшему метод прокси-интерфейса.

java.io

Пакет java.ioсодержит классы, поддерживающие ввод и вывод . Классы в пакете в основном ориентированы на потоки ; однако также предусмотрен класс для файлов произвольного доступа . Центральными классами пакета являются и , которые являются абстрактными базовыми классами для чтения и записи в потоки байтов соответственно. Связанные классы и являются абстрактными базовыми классами для чтения и записи в потоки символов соответственно. В пакете также есть несколько разных классов для поддержки взаимодействия с файловой системой хоста .InputStreamOutputStreamReaderWriter

Потоки

Классы потока следуют шаблону декоратора , расширяя базовый подкласс для добавления функций к классам потока. Подклассы классов базового потока обычно называются по одному из следующих атрибутов:

Подклассы потока именуются с использованием шаблона XxxStreamType именования , где Xxxимя, описывающее функцию, StreamTypeможет быть одним из InputStream, OutputStream, Readerили Writer.

В следующей таблице показаны источники/назначения, поддерживаемые непосредственно пакетом java.io:

Другие пакеты стандартной библиотеки предоставляют реализации потоков для других мест назначения, например, возвращаемых InputStreamметодом java.net.Socket.getInputStream()или классом Java EE javax.servlet.ServletOutputStream.

Обработка типов данных и обработка или фильтрация потоковых данных выполняются с помощью потоковых фильтров . Все классы фильтров принимают другой совместимый объект потока в качестве параметра конструктора и украшают вложенный поток дополнительными функциями. Фильтры создаются путем расширения одного из базовых классов фильтров FilterInputStream, FilterOutputStream, FilterReaderили FilterWriter.

Классы Readerand Writerна самом деле представляют собой просто потоки байтов с дополнительной обработкой потока данных для преобразования байтов в символы. Они используют кодировку символов по умолчанию для платформы, которая, начиная с J2SE 5.0, представлена ​​возвращаемым Charsetстатическим java.nio.charset.Charset.defaultCharset()методом. Класс InputStreamReaderпреобразует a InputStreamв a Reader, а OutputStreamWriterкласс преобразует a OutputStreamв a Writer. Оба этих класса имеют конструкторы, которые поддерживают указание используемой кодировки символов. Если кодировка не указана, программа использует кодировку по умолчанию для платформы.

В следующей таблице показаны другие процессы и фильтры, которые java.ioнапрямую поддерживает пакет. Все эти классы расширяют соответствующий Filterкласс.

Произвольный доступ

Класс RandomAccessFileподдерживает произвольное чтение и запись файлов. Класс использует указатель файла , который представляет смещение в байтах внутри файла для следующей операции чтения или записи. Указатель файла перемещается неявно при чтении или записи и явно при вызове методов seek(long)или skipBytes(int). Текущая позиция указателя файла возвращается методом getFilePointer().

Файловая система

Класс Fileпредставляет путь к файлу или каталогу в файловой системе . объекты поддерживают создание, удаление и переименование файлов и каталогов, а также манипулирование атрибутами файлов , такими как « только для чтения» и временная метка последнего изменения . объекты, представляющие каталоги, можно использовать для получения списка всех содержащихся в них файлов и каталогов.FileFile

Класс FileDescriptor— это файловый дескриптор , который представляет источник или приемник (назначение) байтов. Обычно это файл, но также может быть консольный или сетевой сокет . FileDescriptorобъекты используются для создания Fileпотоков. Они получаются из Fileпотоков, java.netсокетов и сокетов датаграмм.

java.nio

В J2SE 1.4 был добавлен пакет java.nio(NIO или неблокирующий ввод-вывод) для поддержки ввода -вывода с отображением в памяти , что облегчает операции ввода-вывода ближе к базовому оборудованию с иногда значительно большей производительностью. Пакет java.nioобеспечивает поддержку ряда типов буферов. Подпакет java.nio.charsetобеспечивает поддержку различных кодировок символов для символьных данных. Подпакет java.nio.channelsобеспечивает поддержку каналов, которые представляют соединения с объектами, способными выполнять операции ввода-вывода, такими как файлы и сокеты. Пакет java.nio.channelsтакже обеспечивает поддержку детальной блокировки файлов.

java.math

Пакет java.mathподдерживает арифметику с множественной точностью (включая модульные арифметические операции) и предоставляет генераторы простых чисел с множественной точностью, используемые для генерации криптографических ключей. Основные классы пакета:

java.net

Пакет java.netпредоставляет специальные процедуры ввода-вывода для сетей, позволяющие выполнять HTTP- запросы, а также другие распространенные транзакции.

java.текст

Пакет java.textреализует процедуры синтаксического анализа строк и поддерживает различные удобочитаемые языки и синтаксический анализ с учетом локали.

java.util

Структуры данных , объединяющие объекты, находятся в центре внимания пакета java.util. В пакет включен API коллекций — организованная иерархия структур данных, на которую во многом влияют соображения шаблонов проектирования .

Пакеты специального назначения

Java.апплет

Созданный для поддержки создания Java-апплетов , java.appletпакет позволяет загружать приложения по сети и запускать их в защищенной изолированной программной среде. Ограничения безопасности легко накладываются на песочницу. Например, разработчик может применить к апплету цифровую подпись , тем самым пометив его как безопасный. Это позволяет пользователю предоставить апплету разрешение на выполнение ограниченных операций (например, доступ к локальному жесткому диску) и снимает некоторые или все ограничения изолированной программной среды. Цифровые сертификаты выдаются центрами сертификации .

java.beans

В java.beansпакет включены различные классы для разработки и управления bean-компонентами, многократно используемыми компонентами, определенными архитектурой JavaBeans . Архитектура предоставляет механизмы для управления свойствами компонентов и запуска событий при изменении этих свойств.

API-интерфейсы java.beansпредназначены для использования инструментом редактирования bean-компонентов, с помощью которого bean-компоненты можно комбинировать, настраивать и манипулировать ими. Одним из типов редактора компонентов является конструктор графического интерфейса в интегрированной среде разработки .

java.awt

, или java.awtAbstract Window Toolkit, обеспечивает доступ к базовому набору виджетов графического пользовательского интерфейса на основе набора виджетов базовой собственной платформы, ядра подсистемы событий графического пользовательского интерфейса и интерфейса между собственной оконной системой и приложением Java. Он также предоставляет несколько базовых менеджеров макетов , пакет передачи данных для использования с буфером обмена и перетаскиванием , интерфейс для устройств ввода, таких как мыши и клавиатуры , а также доступ к панели задач на поддерживающих системах. Этот пакет javax.swingсодержит наибольшее количество перечислений (всего 7) в JDK 6.

java.rmi

Пакет java.rmiобеспечивает удаленный вызов методов Java для поддержки удаленных вызовов процедур между двумя Java-приложениями, работающими в разных JVM .

java.security

В пакет включена поддержка безопасности, включая алгоритм дайджеста сообщений java.security.

java.sql

Реализация JDBC API (используется для доступа к базам данных SQL ) сгруппирована в пакете.java.sql

javax.rmi

Пакет javax.rmiобеспечивал поддержку удаленной связи между приложениями с использованием протокола RMI over IIOP. Этот протокол сочетает в себе функции RMI и CORBA.

Основные технологии Java SE — CORBA/RMI-IIOP

javax.swing

Swing — это набор подпрограмм, которые создают java.awtнезависимый от платформы набор инструментов виджетов . javax.swingиспользует процедуры 2D-рисования для визуализации компонентов пользовательского интерфейса вместо того, чтобы полагаться на базовую поддержку графического интерфейса операционной системы .

Этот пакет содержит наибольшее количество классов (всего 133) в JDK 6. Этот пакет, а также java.awtнаибольшее количество перечислений (всего 7) в JDK 6. Он поддерживает подключаемые внешний вид (PLAF), поэтому виджеты в графическом интерфейсе могут имитировать те, которые используются в базовой собственной системе. Шаблоны проектирования пронизывают систему, особенно модификация шаблона модель-представление-контроллер , которая ослабляет связь между функцией и внешним видом. Одно несоответствие заключается в том, что (начиная с J2SE 1.3) шрифты рисуются базовой собственной системой, а не Java, что ограничивает переносимость текста. Существуют обходные пути, такие как использование растровых шрифтов. В общем, используются «макеты», которые сохраняют элементы в эстетически согласованном графическом интерфейсе на разных платформах.

javax.swing.text.html.parser

Пакет javax.swing.text.html.parserпредоставляет устойчивый к ошибкам анализатор HTML, который используется для написания различных веб-браузеров и веб-ботов.

javax.xml.bind.annotation

Пакет javax.xml.bind.annotationсодержал наибольшее количество типов аннотаций (всего 30) в JDK 6. Он определяет аннотации для настройки элементов программы Java для сопоставления схемы XML.

ОМГ пакеты

org.omg.CORBA

В org.omg.CORBAпакете предусмотрена поддержка удаленной связи между приложениями с использованием протокола General Inter-ORB и поддерживаются другие возможности архитектуры брокера общих объектных запросов . Как и RMI и RMI-IIOP , этот пакет предназначен для удаленного вызова методов объектов на других виртуальных машинах (обычно через сеть).

Этот пакет содержал наибольшее количество Exceptionклассов (всего 45) в JDK 6. Из всех возможностей связи CORBA переносима между различными языками; однако с этим возникает дополнительная сложность.

Эти пакеты устарели в Java 9 и были удалены из Java 11. [7]

org.omg.PortableInterceptor

Пакет org.omg.PortableInterceptorсодержал наибольшее количество интерфейсов (всего 39) в JDK 6. Он предоставляет механизм регистрации перехватчиков ORB, с помощью которых службы ORB перехватывают нормальный поток выполнения ORB.

Безопасность

Сообщалось о нескольких критических уязвимостях безопасности. [8] [9] В предупреждениях безопасности от Oracle сообщается о критических исправлениях, связанных с безопасностью, для Java SE. [10]

Рекомендации

  1. ^ «Обзор Java SE» . Корпорация Оракл . Проверено 26 февраля 2017 г.
  2. ^ «Содержание выпуска Java SE 6» . Корпорация Oracle и/или ее дочерние компании . Проверено 1 января 2013 г.
  3. ^ Переход на OpenJDK в качестве официальной эталонной реализации Java SE 7.
  4. ^ Платформа Java, Справочные реализации Standard Edition 7
  5. ^ «Платформа Java, эталонные реализации Standard Edition 8» . Архивировано из оригинала 21 ноября 2015 года.
  6. ^ «Обзор запросов спецификации Java» . Корпорация Oracle и/или ее дочерние компании . Проверено 1 января 2013 г.
  7. ^ «JEP 320: удалите модули Java EE и CORBA» . Openjdk.java.net. 23 мая 2019 г. Проверено 20 марта 2022 г.
  8. ^ Опасная уязвимость в последней версии Java The H Security, 10 января 2013 г.
  9. Дарлин Сторм (25 сентября 2012 г.). «Еще одна критическая уязвимость Java подвергает риску 1 миллиард пользователей». Блог Computerworld по безопасности . Архивировано из оригинала 13 января 2013 года . Проверено 11 января 2013 г.
  10. ^ «Критические обновления исправлений, предупреждения безопасности и сторонние бюллетени» . Оракул.

Внешние ссылки