Java SE: відмінності між версіями

[неперевірена версія][неперевірена версія]
Вилучено вміст Додано вміст
Створено шляхом перекладу сторінки «Java Platform, Standard Edition»
Створено шляхом перекладу сторінки «Java Platform, Standard Edition»
Рядок 64:
Відкриття зазвичай починається з об'єкта і викликає метод <code>Object.getClass()</code> щоб отримати <code>Class</code> об'єкта. Об'єкт <code>Class</code> має кілька методів для виявлення вмісту класу, наприклад:
 
* <code>getMethods()</code> - повертає масив об'єктів Method представляють всі загальнодоступні методи класу або інтерфейсу
* <code>getConstructors()</code> - повертає масив об'єктів Constructor представляють всі публічні конструктори класу
* <code>getFields()</code> - повертає масив об'єктів <code>[https://docs.oracle.com/en/java/javase/12/docs/api/jdk.jdi/com/sun/jdi/Field.html Field]</code> представляють усі загальні поля класу або інтерфейсу
Рядок 81:
 
* <code>Field.get(Object)</code> - повертає <code>Object</code> що містить значення поля з екземпляра об'єкта, переданого <code>get()</code> . (Якщо об'єкт <code>Field</code> представляє статичне поле, то параметр <code>Object</code> ігнорується і може бути <code>null</code> . )
* Method.invoke(Object, Object...) - повертає <code>Object</code> що містить результат виклику методу для екземпляра першого параметра <code>Object</code> переданого для <code>invoke()</code> . Інші параметри <code>Object...</code> передаються методу. (Якщо об'єкт <code>Method</code> представляє [[Метод (програмування)|статичний метод,]] то перший параметр <code>Object</code> ігнорується і може бути <code>null</code> . )
* <code>Constructor.newInstance(Object...)</code> - повертає новий екземпляр <code>Object</code> з виклику конструктора. Параметри <code>Object...</code> передаються конструктору. (Зауважте, що конструктор без параметрів класу може також викликатися за допомогою виклику newInstance() . )
 
===== Масиви та проксі =====
Пакет <code>java.lang.reflect</code> також надає клас <code>[https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/lang/reflect/Array.html Array]</code> який містить статичні методи для створення та маніпулювання об'єктами масиву, а також J2SE 1.3 - клас <code>[https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/lang/reflect/Proxy.html Proxy]</code> який підтримує динамічне створення класів проксі, які реалізують вказані інтерфейси.
 
Реалізація класу <code>Proxy</code> забезпечується об'єктом, що постачається, який реалізує інтерфейс InvocationHandler . <code>InvocationHandler</code> <code>invoke(Object, Method, Object [ ] )</code> <code>InvocationHandler</code> <code>invoke(Object, Method, Object[])</code> для кожного методу, викликаного об'єктом проксі - перший параметр є об'єктом proxy, другий параметр - об'єкт <code>Method</code> представляє метод з інтерфейсу, реалізованого proxy, а третім параметром є масив параметрів, що передаються інтерфейсному методу. Метод <code>invoke()</code> повертає результат <code>Object</code> який містить результат, повернутий коду, який називається методом інтерфейсу proxy.
 
=== java.io ===
Пакет java.io містить класи, що підтримують [[Ввід/вивід|введення та виведення даних]] . Класи в пакеті в першу чергу [[Потік (програмування)|орієнтовані на потік]]; однак, клас для [[Файл|файлів]] {{Не перекладено|Випадковий доступ|випадкового доступу|en|Random access}} також надається. Центральними класами в пакеті є <code>InputStream</code> і <code>OutputStream</code>, які є [[Клас (програмування)|абстрактними]] базовими класами для читання і запису в [[Бітовий потік|байтові потоки]], відповідно. Пов'язані класи Reader і Writer є абстрактними базовими класами для читання і запису до [[Символьний тип даних|символьних]] потоків, відповідно. Пакет також має декілька різних класів для підтримки взаємодії з [[Файлова система|файловою системою]] хоста.
 
==== Потоки ====
Класи потоків слідують [[Декоратор (шаблон проектування)|шаблону декоратора]], розширюючи базовий підклас для додавання функцій до класів потоків. Підкласи класів базового потоку зазвичай називаються для одного з таких атрибутів:
 
* джерело / призначення потокових даних
* тип даних, записаних на / з потоку
* додаткову обробку або фільтрацію виконують на потокових даних
 
<code>''XxxStreamType''</code> потоків називаються за допомогою [[Патерн|шаблону]] іменування <code>''XxxStreamType''</code> де <code>''Xxx''</code> - це назва, що описує функцію, а <code>''StreamType''</code> - один з <code>InputStream</code>, <code>OutputStream</code>, <code>Reader</code> або <code>Writer</code> .
 
Наступна таблиця показує джерела / призначення, які підтримуються безпосередньо пакетом <code>java.io</code> :
{| class="wikitable"
! Джерело / призначення
! Ім'я
! Типи потоків
! In out
! Класи
|-
| масив <code>[[Байт|byte]]</code> ( <code>byte[]</code> )
| <code>ByteArray</code>
| <code>byte</code>
| in out
| ByteArrayInputStream, ByteArrayOutputStream
|-
| <code>char</code> масив ( <code>char[]</code> )
| <code>CharArray</code>
| <code>char</code>
| in out
| CharArrayReader, CharArrayWriter
|-
| [[файл]]
| <code>File</code>
| <code>byte</code>, <code>char</code>
| in out
| FileInputStream, FileOutputStream, FileReader, FileWriter
|-
| [[Рядок (програмування)|рядок]] ( <code>[[Рядок (програмування)|StringBuffer]]</code> )
| <code>String</code>
| <code>char</code>
| in out
| StringReader, StringWriter
|-
| [[Потік (інформатика)|нитка]] ( <code>Thread</code> )
| <code>Piped</code>
| <code>byte</code>, <code>char</code>
| in out
| PipedInputStream, PipedOutputStream, PipedReader, PipedWriter
|}
Інші стандартні пакети бібліотеки забезпечують реалізацію потоку для інших напрямків, наприклад <code>InputStream</code> повертається <code>java.net</code>. <code>Socket.getInputStream()</code> або Java EE <code>javax.servlet</code>. Клас <code>ServletOutputStream</code> .
 
Обробка та обробка або фільтрація даних потоку даних здійснюється за допомогою [[Фільтр (програмне забезпечення)|фільтрів]] потоку. Класи фільтрів приймають інший об'єкт сумісного потоку як параметр до конструктора і ''прикрашають'' вкладений потік додатковими функціями. Фільтри створюються шляхом розширення одного з класів базового фільтра FilterInputStream, <code>FilterOutputStream</code>, <code>FilterReader</code> або <code>FilterWriter</code>. {{Reflist|30em}}
 
== зовнішні посилання ==