Платформа Java, Standard Edition

редактировать
Платформа программного обеспечения для вычислений

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

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

Содержание

  • 1 Номенклатура, стандарты и спецификации
  • 2 Пакеты общего назначения
    • 2.1 java.lang
      • 2.1.1 java.lang.ref
      • 2.1.2 java.lang.reflect
        • 2.1.2.1 Методы
          • 2.1.2.1. 1 Обнаружение
          • 2.1.2.1.2 Использование по имени
        • 2.1.2.2 Массивы и прокси
    • 2.2 java.io
      • 2.2.1 Потоки
      • 2.2.2 Произвольный доступ
      • 2.2.3 Файловая система
    • 2.3 java.nio
    • 2.4 java.math
    • 2.5 java.net
    • 2.6 java.text
    • 2.7 java.util
  • 3 Пакеты специального назначения
    • 3.1 java. апплет
    • 3.2 java.beans
    • 3.3 java.awt
    • 3.4 java.rmi
    • 3.5 java.security
    • 3.6 java.sql
    • 3.7 javax.rmi
    • 3.8 javax.swing
    • 3.9 javax.swing.text.html.parser
    • 3.10 javax.xml.bind.annotation
  • 4 пакета OMG
    • 4.1 org.omg.CORBA
    • 4.2 org.omg.PortableInterceptor
  • 5 Безопасность
  • 6 Ссылки
  • 7 Внешние ссылки

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

Платформа была известна как 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). 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 Runtime Environment (JRE) и Java Development Kit (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определяет три других типа ссылок - мягкие, слабые и фантомные ссылки. Каждый тип справочника предназначен для определенного использования.

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

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

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

java.lang.reflect

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

Отражение используется для создания экземпляров классов и вызова методов с использованием их имен, концепция, которая позволяет динамическое программирование. Классы, интерфейсы, методы, поля и конструкторы могут быть обнаружены и использованы во время выполнения. Отражение поддерживается метаданными, которые 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...parameters.
  • getConstructor(Class...) - возвращает объект Constructor, представляющий открытый конструктор класс, который принимает параметры, указанные в Class...parameters.
  • getField("fieldName") - возвращает объект Field, представляющий общедоступный поле с именем «fieldName» класса или интерфейса. Объекты

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

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

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

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

java.io

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

Streams

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

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

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

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

Source/DestinationNameТипы потоковIn / OutКлассы
байт массив (байт)ByteArrayбайтвход, выходByteArrayInputStream , ByteArrayOutputStream
charмассив (char)CharArraycharin, outCharArrayReader , CharArrayWriter
file Filebyte, charin, outFileInputStream , FileOutputStream , FileReader , FileWriter
string (StringBuffer )Stringcharin, outStringReader , StringWriter
поток (Thread)Pipedbyte, charin, outPipedInputStream , PipedOutputStream , PipedReader , PipedWriter

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

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

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

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

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

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

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

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

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

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

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

java.net

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

java.text

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

java.util

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

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

java.applet

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

java.beans

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

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

java.awt

java.awt , или Abstract Window Toolkit, обеспечивает доступ к базовому набору виджетов GUI на основе набора виджетов базовой собственной платформы, ядра подсистемы событий 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 через 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 в all) в JDK 6. Он определяет аннотации для настройки элементов программы Java на отображение схемы XML.

Пакеты OMG

org.omg.CORBA

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

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

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

org.omg.PortableInterceptor

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

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

Сообщалось о нескольких критических уязвимостях системы безопасности, последняя из которых - в январе 2013 года. В предупреждениях безопасности от Oracle объявляются критические исправления, связанные с безопасностью, для Java SE.

Ссылки

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

  • значок Портал компьютерного программирования
Последняя правка сделана 2021-05-24 03:57:22
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте