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

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

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

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

Платформа была известна как Платформа Java 2, стандартная версия или же J2SE с версии 1.2, до смены названия на Платформа Java, стандартная версия или же 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 Ошибка классы, представленные в JDK 6.

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

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

java.lang.ref

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

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

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

Каждый из этих ссылочных типов расширяет Ссылка класс, который обеспечивает получать() метод чтобы вернуть сильную ссылку на референтный объект (или ноль если ссылка была очищена или если тип ссылки фантомный), и Чисто() метод очистки ссылки.

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

java.lang.reflect

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

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

Методы

При рефлексии используются следующие основные техники:

  • Обнаружение - это включает в себя взятие объекта или класса и обнаружение членов, суперклассов, реализованных интерфейсов, а затем, возможно, использование обнаруженных элементов.
  • Использование по имени - включает начало с символического имени элемента и использование именованного элемента.
Открытие

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

  • getMethods () - возвращает массив Метод объекты, представляющие все общедоступные методы класса или интерфейса
  • getConstructors () - возвращает массив Конструктор объекты, представляющие все общедоступные конструкторы класса
  • getFields () - возвращает массив Поле объекты, представляющие все общедоступные поля класса или интерфейса
  • getClasses () - возвращает массив Учебный класс объекты, представляющие все общедоступные классы и интерфейсы, являющиеся членами (например, внутренние классы ) класса или интерфейса
  • getSuperclass () - возвращает Учебный класс объект, представляющий суперкласс класса или интерфейса (ноль возвращается для интерфейсов)
  • getInterfaces () - возвращает массив Учебный класс объекты, представляющие все интерфейсы, которые реализуются классом или интерфейсом
Использовать по имени

В Учебный класс объект может быть получен либо через открытие, либо с помощью литерал класса (например. MyClass.class) или используя имя класса (например, Class.forName ("mypackage.MyClass")). С Учебный класс объект, член Метод, Конструктор, или же Поле объекты могут быть получены с использованием символического имени члена. Например:

  • getMethod ("имя метода", класс ...) - возвращает Метод объект, представляющий общедоступный метод с именем "methodName" класса или интерфейса, который принимает параметры, указанные в Учебный класс... параметры.
  • getConstructor (Класс ...) - возвращает Конструктор объект, представляющий открытый конструктор класса, который принимает параметры, указанные в Учебный класс... параметры.
  • getField ("fieldName") - возвращает Поле объект, представляющий публичное поле с именем fieldName класса или интерфейса.

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

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

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

Реализация Прокси класс предоставляется предоставленным объектом, который реализует InvocationHandler интерфейс. В InvocationHandlerс invoke (Объект, Метод, Объект []) метод вызывается для каждого метода, вызываемого для прокси-объекта - первый параметр - это прокси-объект, второй параметр - Метод объект, представляющий метод из интерфейса, реализованного прокси, а третий параметр - это массив параметров, переданных в метод интерфейса. В invoke () метод возвращает Объект result, содержащий результат, возвращенный коду, который вызвал метод интерфейса прокси.

java.io

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

Потоки

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

  • источник / место назначения потоковых данных
  • тип данных, записываемых в / считываемых из потока
  • дополнительная обработка или фильтрация данных потока

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

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

Источник назначениеИмяТипы потоковВход / ВыходКлассы
байт множество (байт[])ByteArrayбайтв, изByteArrayInputStream, ByteArrayOutputStream
char множество (char [])CharArraycharв, изCharArrayReader, CharArrayWriter
файлФайлбайт, charв, изFileInputStream, FileOutputStream, FileReader, FileWriter
нить (StringBuffer)Нитьcharв, изStringReader, StringWriter
нить (Нить)Водопроводныйбайт, charв, изPipedInputStream, PipedOutputStream, PipedReader, PipedWriter

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

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

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

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

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

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

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

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

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

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

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

java.net

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

java.text

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

java.util

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

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

java.applet

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

java.beans

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

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

java.awt

В java.awt, или Abstract Window Toolkit, предоставляет доступ к базовому набору GUI виджеты, основанные на наборе виджетов базовой собственной платформы, ядре подсистемы событий графического интерфейса пользователя и интерфейсе между собственной оконной системой и приложением 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

Качать представляет собой набор процедур, основанных на 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.

Пакеты OMG

org.omg.CORBA

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

Этот пакет содержит наибольшее количество Исключение классов (всего 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. Получено 26 февраля, 2017.
  2. ^ «Содержание выпуска Java SE 6». Корпорация Oracle и / или его аффилированные лица. Получено 1 января, 2013.
  3. ^ Переход на OpenJDK в качестве официальной эталонной реализации Java SE 7
  4. ^ Платформа Java, Standard Edition 7 Эталонные реализации
  5. ^ «Платформа Java, стандартный выпуск 8, эталонные реализации». Архивировано из оригинал 21 ноября 2015 года.
  6. ^ «Обзор запросов на спецификацию Java». Корпорация Oracle и / или его аффилированные лица. Получено 1 января, 2013.
  7. ^ https://openjdk.java.net/jeps/320
  8. ^ Опасная уязвимость в последней версии Java The H Security, 10 января 2013 г.
  9. ^ Дарлин Сторм (25 сентября 2012 г.). «Еще одна критическая уязвимость Java подвергает риску 1 миллиард пользователей». Computerworld Блог безопасности. Архивировано из оригинал 13 января 2013 г.. Получено 11 января, 2013.
  10. ^ «Критические обновления исправлений, предупреждения системы безопасности и бюллетень третьих лиц». Oracle.

внешняя ссылка