Java Platform, Standard Edition ( Java SE ) - это вычислительная платформа для разработки и развертывания переносимого кода для настольных и серверных сред. [1] Java SE ранее назывался Java 2 Platform, Standard Edition ( J2SE ).
Платформа использует язык программирования Java и является частью семейства программных платформ Java . Java SE определяет ряд API общего назначения, таких как Java API для библиотеки классов 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 Specification Requests (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 Runtime Environment (JRE) и комплект разработчика Java (JDK) фактические файлы , загруженные и установленные на компьютере для запуска или разработки программ Java, соответственно.
Пакеты общего назначения
java.lang
Пакет 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.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
, который может быть использован в каждом из применений , описанных выше , чтобы следить за объектами , которые имеют измененный тип ссылки. Когда 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
объектов, представляющих все интерфейсы, которые реализованы классом или интерфейсом
Использовать по имени
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, A Proxy
класс , который поддерживает динамическое создание прокси - классов, реализующий указанный интерфейс.
Реализация Proxy
класса обеспечивается предоставленным объектом, реализующим InvocationHandler
интерфейс. InvocationHandler
«Ы invoke(Object, Method, Object[])
метод вызывается для каждого метода вызывается на прокси-объекта первого параметра является прокси - объект, второй параметр представляет собой Method
объект , представляющий метод из интерфейса , реализуемого прокси, а третий параметр представляет собой массив параметров передается к способу интерфейса. invoke()
Метод возвращает Object
результат, содержащий результат , возвращенный к коду , который называется прокси - метод интерфейса.
java.io
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()
методом или javax.servlet.ServletOutputStream
классом Java EE .
Обработка типов данных и обработка или фильтрация потоковых данных выполняется с помощью потоковых фильтров . Все классы фильтров принимают другой совместимый объект потока в качестве параметра конструктора и украшают вложенный поток дополнительными функциями. Фильтры создаются путем расширения одного из классов базового фильтра FilterInputStream
, FilterOutputStream
, FilterReader
, или FilterWriter
.
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 |
Произвольный доступ
В 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
пакете поддерживает multiprecision арифметика ( в том числе модульных арифметических операций) и обеспечивают multiprecision простого числа генераторов , используемые для генерации криптографических ключей. Основные классы пакета:
BigDecimal
- предоставляет десятичные числа со знаком произвольной точности.BigDecimal
дает пользователю контроль над поведением округления до концаRoundingMode
.BigInteger
- предоставляет целые числа произвольной точности. Операции надBigInteger
не переполняются и не теряют точности. Помимо стандартных арифметических операций, он обеспечивает модульную арифметику , вычисление GCD , проверку простоты , генерацию простых чисел , манипуляции с битами и другие разные операции.MathContext
- инкапсулировать настройки контекста, которые описывают определенные правила для числовых операторов.RoundingMode
- перечисление, обеспечивающее восемь вариантов поведения округления.
java.net
java.net
Пакет предоставляет специальные процедуры ввода - вывода для сетей, позволяя HTTP запросы, а также другие общие операции.
java.text
В java.text
пакете реализует разборе процедуру для строк и поддержки различных человеческих считываемых языков и локалей разбора.
java.util
Структуры данных, которые агрегируют объекты, находятся в центре внимания java.util
пакета. В пакет входит API коллекций , иерархия организованной структуры данных, на которую в значительной степени влияют соображения шаблонов проектирования .
Пакеты специального назначения
java.applet
Этот пакет, созданный для поддержки создания Java-апплетов , java.applet
позволяет загружать приложения по сети и запускать их в защищенной песочнице. Ограничения безопасности легко накладываются на песочницу. Например, разработчик может применить цифровую подпись к апплету, тем самым пометив его как безопасный. Это позволяет пользователю предоставить апплету разрешение на выполнение ограниченных операций (таких как доступ к локальному жесткому диску) и снимает некоторые или все ограничения песочницы. Цифровые сертификаты выдаются центрами сертификации .
java.beans
В java.beans
пакет включены различные классы для разработки и управления bean-компонентами, повторно используемыми компонентами, определенными архитектурой JavaBeans . Архитектура предоставляет механизмы для управления свойствами компонентов и запуска событий при изменении этих свойств.
API-интерфейсы в java.beans
предназначены для использования инструментом редактирования bean-компонентов, в котором bean-компоненты можно комбинировать, настраивать и манипулировать. Один из типов редакторов компонентов - это дизайнер графического интерфейса пользователя в интегрированной среде разработки .
java.awt
Набор java.awt
инструментов абстрактного окна предоставляет доступ к базовому набору виджетов графического интерфейса пользователя на основе набора виджетов базовой собственной платформы, ядра подсистемы событий графического интерфейса пользователя и интерфейса между собственной оконной системой и приложением Java. Он также предоставляет несколько основных менеджеров компоновки , пакет передачи данных для использования с буфером обмена и перетаскиванием , интерфейс для устройств ввода, таких как мыши и клавиатуры , а также доступ к панели задач на поддерживающих системах. Этот пакет вместе с javax.swing
содержит наибольшее количество перечислений (всего 7) в JDK 6.
java.rmi
java.rmi
Пакет обеспечивает Java удаленный вызов метода для поддержки удаленных вызовов процедур между двумя приложениями ява , работающих в разных виртуальных машинах .
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
использует процедуры двухмерного рисования для визуализации компонентов пользовательского интерфейса вместо того, чтобы полагаться на поддержку графического интерфейса пользователя собственной операционной системы .
Этот пакет содержит наибольшее количество классов (всего 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
Пакет обеспечивает поддержку удаленного обмена данными между приложениями с помощью General Inter-ORB Protocol и поддерживает другие признаки общего объекта запроса брокеру архитектуры . Как и RMI и RMI-IIOP , этот пакет предназначен для вызова удаленных методов объектов на других виртуальных машинах (обычно через сеть).
Этот пакет содержит наибольшее количество Exception
классов (всего 45) в JDK 6. Из всех коммуникационных возможностей CORBA переносима между различными языками; однако с этим возникает большая сложность.
Эти пакеты были объявлены устаревшими в Java 9 и удалены из Java 11. [7]
org.omg.PortableInterceptor
org.omg.PortableInterceptor
Пакет содержит большое количество интерфейсов (39 всего) в JDK 6. Это обеспечивает механизм для регистрации ORB крючков , через которые ОРБ услуги перехватывать нормальный поток исполнения ОРБА.
Безопасность
Сообщалось о нескольких критических уязвимостях системы безопасности. [8] [9] Предупреждения безопасности от Oracle объявляют о критических исправлениях безопасности для Java SE. [10]
Рекомендации
- ^ «Обзор Java SE» . Корпорация Oracle . Проверено 26 февраля 2017 года .
- ^ «Содержание выпуска Java SE 6» . Корпорация Oracle и / или ее дочерние компании . Проверено 1 января 2013 года .
- ^ Переход на OpenJDK в качестве официальной эталонной реализации Java SE 7
- ^ Платформа Java, Standard Edition 7 Эталонные реализации
- ^ «Платформа Java, стандартный выпуск 8, эталонные реализации» . Архивировано из оригинального 21 ноября 2015 года.
- ^ «Обзор запросов на спецификацию Java» . Корпорация Oracle и / или ее дочерние компании . Проверено 1 января 2013 года .
- ^ https://openjdk.java.net/jeps/320
- ^ Опасная уязвимость в последней версии Java The H Security, 10 января 2013 г.
- ^ Дарлин Сторм (25 сентября 2012 г.). «Еще одна критическая уязвимость Java подвергает риску 1 миллиард пользователей» . Блог по безопасности Computerworld . Архивировано из оригинального 13 января 2013 года . Проверено 11 января 2013 года .
- ^ «Критические обновления исправлений, предупреждения системы безопасности и бюллетень третьих сторон» . Oracle.
Внешние ссылки
- Java SE от Oracle Technology Network
- Документация Java SE 10 API Javadocs
- Документация Java SE API
- JSR 270 (Java SE 6)
- 1,8
- 1,7
- 1.6