Jump to content

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

(Перенаправлено с Java.lang )

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

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

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

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

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

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

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

The 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 объект имеет несколько методов для обнаружения содержимого класса, например:

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

The 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().)
Массивы и прокси
[ редактировать ]

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

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

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

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

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

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

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

Источник/Назначение Имя Типы потоков Вход/выход Классы
byte множество ( byte[]) ByteArray byte вход, выход ByteArrayInputStream, ByteArrayOutputStream
char множество ( char[]) CharArray char вход, выход CharArrayReader, CharArrayWriter
файл File byte, char вход, выход FileInputStream, FileOutputStream, FileReader, FileWriter
нить ( StringBuffer) String char вход, выход StringReader, StringWriter
нить ( Thread) Piped byte, char вход, выход PipedInputStream, 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 сорт.

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

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

[ редактировать ]

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

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

[ редактировать ]

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

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

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

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

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

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

java.текст

[ редактировать ]

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

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

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

[ редактировать ]

Java.апплет

[ редактировать ]

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

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

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

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

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

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

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

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

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

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

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

javax.swing.text.html.parser

[ редактировать ]

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

javax.xml.bind.annotation

[ редактировать ]

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

ОМГ пакеты

[ редактировать ]

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

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

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

org.omg.PortableInterceptor

[ редактировать ]

The 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, стандартная версия 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. ^ «Критические обновления исправлений, предупреждения безопасности и сторонние бюллетени» . Оракул.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 5304d60eb5f2dffa78c6af062e5a2397__1724796480
URL1:https://arc.ask3.ru/arc/aa/53/97/5304d60eb5f2dffa78c6af062e5a2397.html
Заголовок, (Title) документа по адресу, URL1:
Java Platform, Standard Edition - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)