Java Platform, Standard Edition (Java SE) є обчислювальною платформою для розробки та розгортання портативного коду для настільних і серверних середовищ.[1] Java SE раніше називалася платформою Java 2, стандартною версією (J2SE).

Платформа використовує мову програмування Java і є частиною сімейства платформ Java. Java SE визначає ряд API загального призначення - такі як Java API[en] длябібліотеки класів Java - і також включає специфікацію мови Java і специфікацію віртуальної машини Java . [2] Один з найбільш відомих   реалізацій Java SE є Java Development Kit (JDK) корпорації Oracle.[3]

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

Платформа була відома як платформа Java 2, 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).[4] 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) є пов'язаною специфікацією, призначеною для забезпечення сертифікованої колекції Java API для розробки програмного забезпечення для невеликих, обмежених ресурсами пристроїв, таких як стільникові телефони, КПК і телеприставки .

Java Runtime Environment (JRE) та Java Development Kit (JDK) - це фактично завантажені та встановлені на комп'ютері файли для запуску або розробки програм Java відповідно.

Пакети загального призначення

java.lang

Пакет Java java.lang містить основні класи та інтерфейси, тісно пов'язані з мовою та середою виконання[en]. Це включає в себе кореневі класи, які утворюють ієрархію класів[en], типи, пов'язані з визначенням мови, основні винятки, математичні функції, потокові, функції безпеки, а також деяку інформацію про базову систему. Цей пакет містить 22 з 32 класів Error наданих у JDK 6.

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

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

java.lang.ref

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

Java має виразну систему посилань і дозволяє особливу поведінку для збору сміття. Нормальна посилання на Java відома як "сильна посилання". Пакет java.lang.ref визначає три інші типи посилань - м'які, слабкі[en] та фантомні посилання. Кожен тип посилання призначений для конкретного використання.

  • SoftReference може використовуватися для реалізації кешу. Об'єкт, який не може бути досягнутий сильним посиланням (тобто не є сильно досяжним), але на нього посилається м'яка посилання, називається "м'яко досяжним". Тендітний об'єкт може бути сміттям, зібраним на розсуд збирача сміття. Це зазвичай означає, що м'якодоступні об'єкти є тільки сміттям, яке збирається, коли вільна пам'ять низька, але знову ж таки, це на розсуд збирача сміття. Семантично, м'яка посилання означає, "Зберегти цей об'єкт, коли ніщо інше не посилається на нього, якщо тільки пам'ять не потрібна".
  • WeakReference використовується для реалізації слабких карт. Об'єкт, який не є сильно або м'яко доступним, але на нього посилається слабка посилання, називається "слабодосяжна[en]". Слабкодоступний об'єкт - це сміття, зібране в наступному циклі збору. Така поведінка використовується в класі java.util.WeakHashMap. Cлабка мапа дозволяє програмісту покласти пари ключ / значення у мапу і не турбуватися про об'єкти, що займають пам'ять, коли ключ більше не може бути досягнутий ніде. Іншим можливим застосуванням слабких посилань є пул інтернування рядків[en] . Семантично, слабка посилання означає "позбутися цього об'єкта, коли ніщо інше не посилається на нього при наступному збиранні".
  • PhantomReference використовується для посилання на об'єкти, які були позначені для збору сміття і були завершені, але ще не були відновлені. Об'єкт, який не є сильно, м'яко або слабкодоступним, але на нього посилається фантомне посилання, називається "phantom reachable". Це дає можливість більш гнучкого очищення, ніж це можливо тільки за допомогою механізму завершення. Семантично, фантомна посилання означає "цей об'єкт більше не потрібний і був завершений під час підготовки до збирання".

Кожен з цих типів посилань розширює клас 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 розміщує програми, такі як отладчики, інтерпретатори, інспектори об'єктів, браузери класів[en] і служби, такі як серіалізація об'єктів і JavaBeans, які потребують доступу до загальнодоступних членів цільового об'єкта (на основі його класу виконання) або членів, оголошених даним класом . Цей пакет було додано до JDK 1.1.

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

Методи

Існують основні методи, які використовуються у рефлекії:

  • Відкриття - це передбачає прийняття об'єкта або класу і виявлення членів, суперкласів, реалізованих інтерфейсів, а потім, можливо, використання знайдених елементів.
  • Використовувати по імені - передбачає, починаючи з символічного імені елемента і використовуючи ім'я елемента.
Відкриття

Відкриття зазвичай починається з об'єкта і викликає метод Object.getClass() щоб отримати Class об'єкта. Об'єкт Class має кілька методів для виявлення вмісту класу, наприклад:

  • getMethods() - повертає масив об'єктів Method представляють всі загальнодоступні методи класу або інтерфейсу
  • getConstructors() - повертає масив об'єктів Constructor представляють всі публічні конструктори класу
  • getFields() - повертає масив об'єктів Field представляють усі загальні поля класу або інтерфейсу
  • getClasses() - повертає масив об'єктів Class представляють усі відкриті класи і інтерфейси, які є членами (наприклад, внутрішніми класами ) класу або інтерфейсу
  • getSuperclass() - повертає об'єкт Class представляє суперклас класу або інтерфейсу (для інтерфейсів повертається null )
  • getInterfaces() - повертає масив об'єктів Class представляють усі інтерфейси, які реалізовані класом або інтерфейсом
Використовуйте по імені

Об'єкт Class може бути отриманий або за допомогою відкриття, використовуючи клас literal (наприклад MyClass.class ) або за допомогою імені класу (наприклад Class.forName("mypackage. MyClass")). З об'єктом Class можна отримати елемент Method, Constructor або Field використовуючи символічне ім'я члена. Наприклад:

  • getMethod("methodName", Class...) - повертає об'єкт Method представляє відкритий метод, з назвою "methodName" класу або інтерфейсу, який приймає параметри, задані параметрами Class...
  • getConstructor(Class...) - повертає об'єкт Constructor представляє публічний конструктор класу, який приймає параметри, задані параметрами Class...
  • getField("fieldName") - повертає об'єкт Field представляє публічне поле з ім'ям "fieldName" класу або інтерфейсу.

Об'єкти Method, Constructor і Field можуть використовуватися для динамічного доступу до представленого члена класу. Наприклад:

  • Field.get(Object) - повертає Object що містить значення поля з екземпляра об'єкта, переданого get() . (Якщо об'єкт Field представляє статичне поле, то параметр Object ігнорується і може бути null . )
  • Method.invoke(Object, Object...) - повертає Object що містить результат виклику методу для екземпляра першого параметра Object переданого для invoke() . Інші параметри Object... передаються методу. (Якщо об'єкт Method представляє статичний метод, то перший параметр Object ігнорується і може бути null)
  • Constructor.newInstance(Object...) - повертає новий екземпляр Object з виклику конструктора. Параметри Object... передаються конструктору. (Зауважте, що конструктор без параметрів класу може також викликатися за допомогою виклику newInstance())
Масиви та проксі

Пакет java.lang.reflect також надає клас Array який містить статичні методи для створення та маніпулювання об'єктами масиву, а також J2SE 1.3 - клас Proxy який підтримує динамічне створення класів проксі, які реалізують вказані інтерфейси.

Реалізація класу Proxy забезпечується об'єктом, що постачається, який реалізує інтерфейс InvocationHandler . InvocationHandler invoke(Object, Method, Object[]) InvocationHandler invoke(Object, Method, Object[]) для кожного методу, викликаного об'єктом проксі - перший параметр є об'єктом proxy, другий параметр - об'єкт Method представляє метод з інтерфейсу, реалізованого proxy, а третім параметром є масив параметрів, що передаються інтерфейсному методу. Метод invoke() повертає результат Object який містить результат, повернутий коду, який називається методом інтерфейсу proxy.

java.io

Пакет java.io містить класи, що підтримують введення та виведення даних . Класи в пакеті в першу чергу орієнтовані на потік; однак, клас для файлів випадкового доступу також надається. Центральними класами в пакеті є InputStream і OutputStream, які є абстрактними базовими класами для читання і запису в байтові потоки, відповідно. Пов'язані класи Reader і Writer є абстрактними базовими класами для читання і запису до символьних потоків, відповідно. Пакет також має декілька різних класів для підтримки взаємодії з файловою системою хоста.

Потоки

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

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

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

Наступна таблиця показує джерела / призначення, які підтримуються безпосередньо пакетом java.io :

Джерело / призначення Ім'я Типи потоків In out Класи
масив byte ( byte[] ) ByteArray byte in out ByteArrayInputStream, ByteArrayOutputStream
char масив ( char[] ) CharArray char in out CharArrayReader, CharArrayWriter
файл File byte, char in out FileInputStream, FileOutputStream, FileReader, FileWriter
рядок ( StringBuffer ) String char in out StringReader, StringWriter
нитка ( Thread ) Piped byte, char in out PipedInputStream, PipedOutputStream, PipedReader, PipedWriter

Інші стандартні пакети бібліотеки забезпечують реалізацію потоку для інших напрямків, наприклад InputStream повертається java.net. Socket.getInputStream() або Java EE javax.servlet. Клас ServletOutputStream .

Обробка та обробка або фільтрація даних потоку даних здійснюється за допомогою фільтрів потоку. Класи фільтрів приймають інший об'єкт сумісного потоку як параметр до конструктора і прикрашають вкладений потік додатковими функціями. Фільтри створюються шляхом розширення одного з класів базового фільтра FilterInputStream, FilterOutputStream, FilterReader або FilterWriter.

  1. Java SE Overview. Oracle Corporation. Процитовано 26 лютого 2017.
  2. Java SE 6 Release Contents. Oracle Corporation and/or its affiliates. Процитовано 1 січня 2013.
  3. Java SE 7 Features and Enhancements. Oracle Corporation. Процитовано 4 травня 2016. [...] JDK 7, Oracle's implementation of Java SE 7.
  4. Java Specification Requests Overview. Oracle Corporation and/or its affiliates. Процитовано 1 січня 2013.

зовнішні посилання

[[Категорія:Програмні платформи]] [[Категорія:Сторінки із неперевіреними перекладами]]