stringtranslate.com

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

Java Platform, Standard Edition ( Java SE ) — вычислительная платформа для разработки и развертывания переносимого кода для настольных и серверных сред. [1] Java SE ранее была известна как Java 2 Platform, 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 Community Process , который создает описания предлагаемых и окончательных спецификаций для платформы Java, называемых Java Specification Requests (JSR) . [6] JSR 59 была зонтичной спецификацией для J2SE 1.4, а JSR 176 специфицировал J2SE 5.0 (Tiger). Java SE 6 (Mustang) была выпущена в соответствии с JSR 270.

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

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

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

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

java.язык

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

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

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

java.язык.ссылка

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

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

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

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

java.язык.отражение

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

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

Методы

В рефлексии задействованы следующие основные приемы:

Открытие

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

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

Объект Classможет быть получен либо через обнаружение, либо с помощью литерала класса (например MyClass.class), либо с помощью имени класса (например Class.forName("mypackage.MyClass")). С Classобъектом, членом 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.

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

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

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

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

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

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

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

java.nio

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

java.математика

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

java.net

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

java.текст

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

java.утилита

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

Специальные пакеты

java.апплет

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

java.бобовые

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

API в java.beansпредназначены для использования инструментом редактирования bean-компонентов, в котором bean-компоненты могут быть объединены, настроены и обработаны. Один из типов редактора bean-компонентов — это GUI- дизайнер в интегрированной среде разработки .

java.awt

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

java.rmi

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

безопасность.java

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

java.sql

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

javax.rmi

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

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

javax.качание

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

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

javax.swing.text.html.parser

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

javax.xml.bind.аннотация

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

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