Платформа 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:

  • Object– класс, являющийся корнем каждой иерархии классов.
  • Enum– базовый класс для классов перечисления (начиная с J2SE 5.0).
  • Class– класс, являющийся корнем системы рефлексии Java .
  • Throwable– класс, являющийся базовым классом иерархии классов исключений.
  • Error, Exception, и RuntimeException– базовые классы для каждого типа исключения.
  • Thread– класс, позволяющий выполнять операции над потоками.
  • String– класс для строк и строковых литералов .
  • StringBufferи StringBuilder– классы для выполнения манипуляций со строками ( StringBuilderначиная с J2SE 5.0).
  • Comparable– интерфейс, позволяющий выполнять общее сравнение и упорядочивание объектов (начиная с J2SE 1.2).
  • Iterable– интерфейс, позволяющий выполнять универсальную итерацию с использованием расширенного forцикла (начиная с J2SE 5.0).
  • ClassLoader, Process, Runtime, SecurityManager, и System– классы, которые предоставляют «системные операции», управляющие динамической загрузкой классов, созданием внешних процессов , запросами хост-среды, такими как время суток, и применением политик безопасности .
  • Mathи StrictMath– классы, предоставляющие основные математические функции, такие как синус , косинус и квадратный корень ( StrictMathначиная с J2SE 1.3).
  • Примитивные классы-оболочки , которые инкапсулируют примитивные типы как объекты .
  • Базовые классы исключений, создаваемые для исключений на уровне языка и других распространенных исключений.

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

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

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

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

  • A SoftReferenceможет быть использован для реализации кэша . Объект, который недоступен по сильной ссылке (то есть не является строго достижимым), но на который ссылается мягкая ссылка, называется «мягко достижимым». Мягко достижимый объект может быть собран мусором по усмотрению сборщика мусора. Это обычно означает, что мягко достижимые объекты собираются мусором только при низком уровне свободной памяти, но, опять же, это остается на усмотрение сборщика мусора. Семантически мягкая ссылка означает: «Сохраняйте этот объект, когда на него больше ничего не ссылается, если только память не нужна».
  • A WeakReferenceиспользуется для реализации слабых карт. Объект, который не является строго или мягко достижимым, но на который ссылается слабая ссылка, называется « слабо достижимым ». Слабо достижимый объект собирается мусором в следующем цикле сбора. Такое поведение используется в классе java.util.WeakHashMap. Слабая карта позволяет программисту помещать пары ключ/значение в карту и не беспокоиться о том, что объекты занимают память, когда ключ больше не доступен нигде. Другим возможным применением слабых ссылок является строковый пул интернирования . Семантически слабая ссылка означает «избавиться от этого объекта, когда на него больше ничего не ссылается при следующей сборке мусора».
  • A PhantomReferenceиспользуется для ссылки на объекты, которые были помечены для сбора мусора и были финализированы , но еще не были утилизированы. Объект, который не является строго, мягко или слабо достижимым, но на который ссылается фантомная ссылка, называется «фантомно достижимым». Это позволяет производить более гибкую очистку, чем это возможно с помощью одного только механизма финализации. Семантически фантомная ссылка означает «этот объект больше не нужен и был финализирован в рамках подготовки к сбору».

Каждый из этих ссылочных типов расширяет 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У объекта есть несколько методов для обнаружения содержимого класса, например:

  • getMethods()– возвращает массив Methodобъектов, представляющих все публичные методы класса или интерфейса
  • getConstructors()– возвращает массив Constructorобъектов, представляющих все публичные конструкторы класса
  • getFields()– возвращает массив Fieldобъектов, представляющих все открытые поля класса или интерфейса
  • getClasses()– возвращает массив Classобъектов, представляющих все открытые классы и интерфейсы, которые являются членами (например, внутренние классы ) класса или интерфейса
  • getSuperclass()– возвращает Classобъект, представляющий суперкласс класса или интерфейса ( nullвозвращается для интерфейсов)
  • getInterfaces()– возвращает массив Classобъектов, представляющих все интерфейсы, которые реализованы классом или интерфейсом
Использовать по имени

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

  • getMethod("methodName", Class...)– возвращает Methodобъект, представляющий открытый метод с именем «methodName» класса или интерфейса, который принимает параметры, указанные параметрами Class....
  • getConstructor(Class...)– возвращает Constructorобъект, представляющий открытый конструктор класса, который принимает параметры, указанные параметрами Class....
  • getField("fieldName")– возвращает Fieldобъект, представляющий публичное поле с именем «fieldName» класса или интерфейса.

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

  • Field.get(Object)– возвращает , Objectсодержащий значение поля из экземпляра объекта, переданного в get(). (Если Fieldобъект представляет статическое поле, то Objectпараметр игнорируется и может быть null.)
  • Method.invoke(Object, Object...)– возвращает Objectсодержащий результат вызова метода для экземпляра первого Objectпараметра, переданного в invoke(). Оставшиеся Object...параметры передаются в метод. (Если Methodобъект представляет статический метод , то первый Objectпараметр игнорируется и может быть null.)
  • Constructor.newInstance(Object...)– возвращает новый Objectэкземпляр из вызова конструктора. Object...Параметры передаются конструктору. (Обратите внимание, что конструктор без параметров для класса также может быть вызван вызовом newInstance().)
Массивы и прокси

Пакет 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:

Источник/Пункт назначенияИмяТипы потоковВход/выходКлассы
byte множество ( byte[])ByteArraybyteв, изByteArrayInputStream,ByteArrayOutputStream
charмножество ( char[])CharArraycharв, изCharArrayReader,CharArrayWriter
файлFilebyte,charв, изFileInputStream, FileOutputStream, FileReader,FileWriter
нить ( StringBuffer)Stringcharв, изStringReader,StringWriter
нить ( Thread)Pipedbyte,charв, изPipedInputStream, PipedOutputStream, PipedReader,PipedWriter

Другие стандартные библиотечные пакеты предоставляют потоковые реализации для других назначений, таких как 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класс.

ОперацияИмяТипы потоковВход/выходКлассы
буферизацияBufferedbyte,charв, изBufferedInputStream, BufferedOutputStream, BufferedReader,BufferedWriter
"отбросить" последнее прочитанное значениеPushbackbyte,charвPushbackInputStream,PushbackReader
примитивные типы чтения/записиDatabyteв, изDataInputStream,DataOutputStream
сериализация объектов (чтение/запись объектов)Objectбайтв, изObjectInputStream,ObjectOutputStream

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

Класс 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поддерживает арифметику с множественной точностью (включая модульные арифметические операции) и предоставляет генераторы простых чисел с множественной точностью, используемые для генерации криптографических ключей. Основные классы пакета:

  • BigDecimal– обеспечивает произвольную точность знаковых десятичных чисел. BigDecimalдает пользователю контроль над поведением округления с помощью RoundingMode.
  • BigInteger– предоставляет целые числа произвольной точности. Операции BigIntegerне переполняются и не теряют точность. В дополнение к стандартным арифметическим операциям, он предоставляет модульную арифметику , вычисление НОД , проверку простоты , генерацию простых чисел , манипуляцию битами и другие разнообразные операции.
  • MathContext – инкапсулируют настройки контекста, описывающие определенные правила для числовых операторов.
  • RoundingMode– перечисление, которое обеспечивает восемь вариантов округления.

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.
  • Java SE от Oracle Technology Network
  • Java SE 19 API Javadocs
  • Документация по API Java SE
  • JSR 270 (Java SE 6)
  • 1.8
  • 1.7
  • 1.6
Retrieved from "https://en.wikipedia.org/w/index.php?title=Java_Platform,_Standard_Edition&oldid=1242660390"