Java (вимовляється Джава) — об'єктно-орієнтована мова програмування, випущена 1995 року компанією «Sun Microsystems» як основний компонент платформи Java. З 2009 року мовою займається компанія «Oracle», яка того року придбала «Sun Microsystems». В офіційній реалізації Java-програми компілюються у байт-код, який при виконанні інтерпретується віртуальною машиною для конкретної платформи.
Java | |
---|---|
Парадигма | об'єктно-орієнтована, структурна, імперативна |
Дата появи | 1995 |
Творці | Sun Microsystems, Oracle |
Розробник | Oracle Corporation |
Останній реліз | Java SE 21.0.1 (17 жовтня 2023 ) |
Система типізації | статична, сувора, безпечна, називна, явна |
Основні реалізації | віртуальні машини Java |
Під впливом від | Objective-C, , Smalltalk, Eiffel, Ada 83, , |
Вплинула на | C#, D, J#, Ada 2005, ECMAScript, Groovy, PHP, Scala, JavaScript |
Операційна система | Мультиплатформна |
Ліцензія | GNU General Public License / Java Community Process |
Звичайні розширення файлів | .java , .class , .jar , .jad або .jmod |
Вебсайт | Офіційна сторінка (англ.) |
|
«Oracle» надає компілятор Java та віртуальну машину Java, які задовольняють специфікації Java Community Process, під ліцензією GNU General Public License.
Мова значно запозичила синтаксис із C і . Зокрема, взято за основу об'єктну модель С++, проте її модифіковано. Усунуто можливість появи деяких конфліктних ситуацій, що могли виникнути через помилки програміста та полегшено сам процес розроблення об'єктно-орієнтованих програм. Ряд дій, які в С/C++ повинні здійснювати програмісти, доручено віртуальній машині. Передусім Java розроблялась як платформо-незалежна мова, тому вона має менше низькорівневих можливостей для роботи з апаратним забезпеченням, що в порівнянні, наприклад, з C++ зменшує швидкість роботи програм. За необхідності таких дій Java дозволяє викликати підпрограми, написані іншими мовами програмування.
Java вплинула на розвиток [en], що розроблялась компанією «Microsoft». Роботу над J++ було зупинено через судовий позов «Sun Microsystems», оскільки ця мова програмування була модифікацією Java. Пізніше в новій платформі «Microsoft» .NET випустили J#, щоб полегшити міграцію програмістів J++ або Java на нову платформу. З часом нова мова програмування С# стала основною мовою платформи, перейнявши багато чого з Java. J# востаннє включався в версію Microsoft Visual Studio 2005. Мова сценаріїв JavaScript має схожу із Java назву і синтаксис, але не пов'язана із Java.
Назва
Спочатку мова називалася Oak («дуб») і розроблялася Джеймсом Гослінгом для програмування побутових електронних пристроїв. Згодом вона була перейменована в Java і стала використовуватися для написання клієнтських застосунків і серверного програмного забезпечення. Названа на честь марки кави Java, яка, в свою чергу, отримала найменування однойменного острова (Ява), тому на офіційній емблемі мови зображена чашка з паркою кавою. Існує й інша версія походження назви мови, пов'язана з алюзією на каво-машину як приклад побутового устаткування, для програмування якого спочатку мова створювалася.
Історія
Мова програмування Java зародилася в 1991 р. в лабораторіях компанії Sun Microsystems. Розробку проєкту започаткував Джеймс Ґослінґ, сам проєкт мав назву «Green» (Зелений). Створення першої робочої версії, яка мала назву «Oak» (дуб), зайняло 18 місяців. Оскільки виявилось, що ім'я Oak уже використовувалось іншою фірмою, то в результаті тривалих суперечок навколо назви нової мови з-поміж ряду запропонованих було вибрано назву Java, у 1995 р. мову було офіційно перейменовано.
Головним мотивом створення Java була потреба в мові програмування, яка б не залежала від платформи (тобто від архітектури) і яку можна було б використовувати для створення програмного забезпечення, що вбудовується в різноманітні побутові електронні прилади, такі як мобільні засоби зв'язку, пристрої дистанційного керування тощо.
Досить скоро майже всі найпопулярніші тогочасні вебоглядачі отримали можливість запускати «безпечні» для системи Java-аплети всередині вебсторінок. У грудні 1998 р. Sun Microsystems випустила Java 2 (спершу під назвою J2SE 1.2), де було реалізовано декілька конфігурацій для різних типів платформ. Наприклад, J2EE призначалася для створення корпоративних застосунків, а значно урізана J2ME для приладів з обмеженими ресурсами, таких як мобільні телефони. У 2006 році в маркетингових цілях версії J2 було перейменовано у Java EE, Java ME та Java SE відповідно.
13 листопада 2006 року Sun випустили більшу частину Java як вільне та відкрите програмне забезпечення згідно з умовами GNU General Public License (GPL). 8 травня 2007 корпорація закінчила процес, в результаті якого всі початкові коди Java були випущенні під GPL, за винятком невеликої частини коду, на який Sun не мала авторського права.
Період становлення Java збігся у часі з розквітом міжнародної інформаційної служби World Wide Web. Ця обставина відіграла вирішальну роль у майбутньому Java, оскільки Web теж вимагала платформо-незалежних програм. Як наслідок, були зміщені акценти в розробці Sun з побутової електроніки на програмування для Інтернет.
В 2023 році, у категорії найпопулярніших мов програмування серед IT-спеціалістів згідно рейтингу IEEE Spectrum, який охоплював 59 мов програмування, топ-5 виглядав так: Python, Java, C++, C, JavaScript.
Головні концепції
Початкові цілі
У створенні мови програмування Java було п'ять початкових цілей:
- Синтаксис мови повинен бути «простим, об'єктно-орієнтовним та звичним».
- Реалізація має бути «безвідмовною та безпечною».
- Повинна зберегтися «незалежність від архітектури та переносність».
- Висока продуктивність виконання
- Мова має бути «інтерпретованою, багатопотоковою, із динамічним зв'язуванням модулів».
Платформа
Під «незалежністю від архітектури» мається на увазі те, що програма, написана на мові Java, працюватиме на будь-якій підтримуваній апаратній чи системній платформі без змін у початковому коді та перекомпіляції.
Цього можна досягти, компілюючи початковий Java код у байт-код, який є спрощеними машинними командами. Потім програму можна виконати на будь-якій платформі, що має встановлену віртуальну машину Java, яка інтерпретує байткод у код, пристосований до специфіки конкретної операційної системи і процесора. Зараз віртуальні машини Java існують для більшості процесорів і операційних систем.
Стандартні бібліотеки забезпечують загальний спосіб доступу до таких платформозалежних особливостей, як обробка графіки, багатопотоковість та роботу з мережами. У деяких версіях задля збільшення продуктивності JVM байт-код можна компілювати у машинний код до або під час виконання програми.
Основна перевага використання байт-коду — це портативність. Тим не менш, додаткові витрати на інтерпретацію означають, що інтерпретовані програми будуть майже завжди працювати повільніше, ніж скомпільовані у машинний код, і саме тому Java одержала репутацію «повільної»[] мови. Проте, цей розрив суттєво скоротився після введення декількох методів оптимізації у сучасних реалізаціях JVM.
Одним із таких методів є just-in-time компіляція (JIT), що перетворює байт-код Java у машинний під час першого запуску програми, а потім кешує його. У результаті така програма запускається і виконується швидше, ніж простий інтерпретований код, але ціною додаткових витрат на компіляцію під час виконання. Складніші віртуальні машини також використовують динамічну рекомпіляцію, яка полягає в тому, що віртуальна машина аналізує поведінку запущеної програми й вибірково рекомпілює та оптимізує певні її частини. З використанням динамічної рекомпіляції можна досягти більшого рівня оптимізації, ніж за статичної компіляції, оскільки динамічний компілятор може робити оптимізації на базі знань про довкілля періоду виконання та про завантажені класи. До того ж він може виявляти так звані гарячі точки (англ. hot spots) — частини програми, найчастіше внутрішні цикли, які займають найбільше часу при виконанні. JIT-компіляція та динамічна рекомпіляція збільшує швидкість Java-програм, не втрачаючи при цьому портативності.
Існує ще одна технологія оптимізації байткоду, широко відома як статична компіляція, або компіляція ahead-of-time (AOT). Цей метод передбачає, як і традиційні компілятори, безпосередню компіляцію у машинний код. Це забезпечує хороші показники в порівнянні з інтерпретацією, але за рахунок втрати переносності: скомпільовану таким способом програму можна запустити тільки на одній, цільовій платформі.
Швидкість офіційної віртуальної машини Java значно покращилася з моменту випуску ранніх версій, до того ж, деякі випробування показали, що продуктивність JIT-компіляторів у порівнянні зі звичайними компіляторами у машинний код майже однакова. Проте ефективність компіляторів не завжди свідчить про швидкість виконання скомпільованого коду, тільки ретельне тестування може виявити справжню ефективність у даній системі.
Об'єктність
На противагу , Java є більш об'єктно-орієнтованою. Всі дані і дії групуються в класи об'єктів. Виключенням з повної об'єктності (як скажімо в Smalltalk) є примітивні типи (int, float тощо). Це було свідомим рішенням проєктувальників мови задля збільшення швидкості. Через це Java не вважається повністю об'єктно-орієнтовною мовою.
У Java всі об'єкти є похідними від головного об'єкта (він називається просто Object), з якого вони успадковують базову поведінку і властивості.
Хоча у C++ вперше стало доступне множинне успадкування, але у Java можливе тільки одинарне успадкування, завдяки чому виключається можливість конфліктів між членами класу (методи і змінні), які успадковуються від базових класів.
Безпека
У намірах проєктувальників Java мала замінити — об'єктного наступника мови C. Проєктувальники почали з аналізу властивостей C++, які є причиною найбільшого числа помилок, щоби створити просту, безпечну і безвідмовну мову програмування.
В Java існує система винятків або ситуацій, коли програма зустрічається з неочікуваними труднощами, наприклад:
- операції над елементом масиву поза його межами або над порожнім елементом
- читання з недоступного каталогу або неправильної адреси URL
- ввід недопустимих даних користувачем
Одна з особливостей концепції віртуальної машини полягає в тому, що помилки (виключення) не призводять до повного краху системи. Крім того, існують інструменти, які «приєднуються» до середовища періоду виконання і кожен раз, коли сталося певне виключення, записують інформацію з пам'яті для зневадження програми. Ці інструменти [en] надають основну інформацію щодо виключень в програмах на Java.
Проте мову програмування Java не рекомендується використовувати в системах, збій в роботі яких може призвести до смерті, травм чи значних фізичних ушкоджень (наприклад, програмне забезпечення для керування атомними електростанціями, польотами, систем життєзабезпечення чи систем озброєння) через ненадійність програм, написаних на мові програмування Java (пункт ліцензії Microsoft 7.7.h.).
Автоматичне керування пам'яттю
Java використовує автоматичний збирач сміття (GC - Garbage Collector) для керування пам'яттю під час життєвого циклу об'єкта. Програміст вирішує, коли створювати об'єкти, а віртуальна машина відповідальна за звільнення пам'яті після того, як об'єкт стає непотрібним. Коли до певного об'єкта вже не залишається посилань, збирач сміття може автоматично прибирати його із пам'яті. Проте, витік пам'яті все ж може статися, якщо код, написаний програмістом, має посилання на вже непотрібні об'єкти, наприклад на об'єкти, що зберігаються у діючих контейнерах.
Збирання сміття дозволене у будь-який час. В ідеалі воно відбувається під час бездіяльності програми. Збірка сміття автоматично форсується при нестачі вільної пам'яті в купі для розміщення нового об'єкта, що може призводити до кількасекундного зависання. Тому існують реалізації віртуальної машини Java з прибиральником сміття, спеціально створеним для програмування систем реального часу.
Java не має підтримки вказівників у стилі C/C++. Це зроблено задля безпеки й надійності, аби дозволити збирачу сміття переміщувати вказівникові об'єкти.
Приклад програми
Програма, яка виводить «Hello, World!»:
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }
Програма, яка читає один рядок тексту з клавіатури та виводить його на екран:
public class ReadData { public static void main(String args[]) throws Exception { String line = ""; char c; while ((c = (char)System.in.read()) != -1 && c != '\n') line += c; System.out.println(line); } }
Випуски
- JDK 1.0 (23 січня 1996)
- JDK 1.1 (19 жовтня 1997) — додано внутрішні класи, JavaBeans, JDBC, RMI, перероблено події AWT
- J2SE 1.2 (Playground) 4 грудня 1998 — поділ на 3 редакції: J2SE (Java 2 Platform, Standard Edition), J2EE (Java 2 Platform, Enterprise Edition), J2ME (Java 2 Platform, Micro Edition), strictfp, , Swing, JIT compiler, Collections
- J2SE 1.3 (Kestrel) 8 травня 2000
- J2SE 1.4.0 (Merlin) 13 лютого 2002
- J2SE 5.0 (1.5.0) (Tiger) 29 вересня 2004 — здійснено істотну доробку мови. Додано ряд елементів, наприклад, цикл for each, об'єктне представлення простих типів та ін. Також змінено принцип нумерації версій.
- Java SE 6 (1.6.0) (Mustang) 11 грудня 2006 [1] [ 4 липня 2007 у Wayback Machine.]
- Java SE 7 (1.7.0) (Dolphin) 28 липня 2011
- Java SE 8 (1.8.0) (неформальна назва Spider) 18 березня 2014 — серед іншого додано підтримку лямбда-виразів.
- Java SE 9 — 21 вересня 2017. З цього року проєкт перейшов на випуск нової версії платформи що 6 місяців (кожного березня, та кожного вересня).
- Java SE 10 — 20 березня 2018. Цей реліз став релізом з новими функціями (англ. feature release) та прийшов на заміну релізу 9.
- Java SE 11 — 25 вересня 2018 вийшов реліз з тривалою підтримкою (англ. long-term support, LTS).
- Java 14 — 19 березня 2020 року була представлена версія для розробників. Ця версія увібрала в себе 16 пропозицій до покращення (англ. Java enhancement proposals). Було поліпшено взаємодію з кодом на C та C++.
- Java 15 - 15 вересня 2020.
- Java 16 - 16 березня 2021.
- Java 17 (17.0.5) - 18 жовтня 2022 вийшла версія.
- Java 19 (19.0.1) - реліз 18 жовтня 2022.
Останні релізи
Структура Java-програми
Програми на Java утворені з визначень класів та інтерфейсів. Класи містять змінні та константи, які утримують дані, методи, які виконують дії, та конструктори, які створюють екземпляри класів — об'єкти. Дані можуть мати простий тип (наприклад байт, ціле число, символ) або бути посиланням на об'єкт. Мова Java є статично типізованою.
Лексична структура
Java-програми записуються в Юнікоді, також надається лексичне перетворення, яке дозволяє записувати символи Юнікоду керівними кодами Unicode за допомогою лише множини символів ASCII. Мова Java представляє текст послідовностями 16-бітних кодових одиниць, використовуючи кодування UTF-16. За винятком коментарів, ідентифікаторів та вмісту символьних та рядкових літералів, всі вхідні елементи програми на Java складаються із символів ASCII або відповідних їм керівних кодів Unicode.
Типи даних
Java є суворо типізованою мовою, кожна змінна та вираз має тип, відомий на етапі компіляції.
Типи даних Java належать до двох категорій: прості (primitive) та вказівникові (reference). До простих типів належить булевий(логічний) тип, числові типи та символьний тип.
Числові типи складаються із цілих типів byte, short, int, long та дійсних типів float, double. Символьний тип представлений типом char. Вказівникові типи складаються із класів, інтерфейсів, масивів. Значенням вказівникового типу є вказівник на об'єкт — екземпляр класу чи масиву. Рядки є об'єктами класу String.
Прості типи даних
Тип | Довжина (в байтах) | Діапазон або набір значень |
---|---|---|
boolean | не визначено | true, false |
byte | 1 | −128..127 |
char | 2 | 0..216−1, або 0..65535 |
short | 2 | −215..215−1, або −32768..32767 |
int | 4 | −231..231−1, або −2147483648..2147483647 |
long | 8 | −263..263−1, або приблизно −9.2·1018..9.2·1018 |
float | 4 | -(2-2−23)·2127..(2-2−23)·2127, або приблизно −3.4·1038..3.4·1038, а також , , NaN |
double | 8 | -(2-2−52)·21023..(2-2−52)·21023, або приблизно −1.8·10308..1.8·10308, а також , , NaN |
Критика
Оскільки Java програми виконуються віртуальною машиною Java, то це призводить до дещо нижчої швидкодії, порівняно з самого початку скомпільованими у машинний код програмами (наприклад, написаними на С++). Проте за останнє десятиліття розробники віртуальної машини значно пришвидшили цей процес, тож в даний час програми на Java не надто поступаються аналогам на С++. Іншою проблемою Java є те, що для низькорівневого програмування (для роботи з апаратним забезпеченням) все ж необхідно використовувати модулі написані на інших більш пристосованих для цього мовах програмування (той же С++). Для стандартних задач, як то робота із портами комп'ютера, для Java уже існують готові сторонні native-бібліотеки. Програми, які використовують платформно залежні модулі уже не є настільки портабельними і потребують, щоб дані модулі були реалізовані для різних систем. Ще однією з ґрунтовних проблем Java є безпека Java аплетів — спеціальних програм на Java, що можуть вбудовуватися у вебсторінки. Щоправда останні так і не набули значної популярності в інтернеті, поступившись іншим аналогічним технологіям, як то флеш технологія.
Використання іншими компаніями
При створенні Android (операційної системи з відкритим кодом) Google взяла за основу Java. Незважаючи на те, що операційна система, збудована на ядрі Linux, була написана переважно на C, Android SDK використовує Java для розробки застосунків для платформи Android.
7 травня 2012 року суд Сан-Франциско виявив, що якщо API може бути захищене авторським правом, то Google, використовуючи Java в Android, порушив авторські права Oracle. Було підняте питання про правовий статус використання Java в Android-пристроях. Однак вже 31 травня того ж року федеральний суддя США постановив, що API не можуть бути захищеними авторським правом.
Графічний інтерфейс користувача
Для реалізації графічного інтерфейсу (GUI) в Java існують три основні пакети класів:
Перевагами першого є простота використання, інтерфейс, подібний до інтерфейсу операційної системи, та дещо краща швидкодія, оскільки базується на засобах ОС, щоправда має обмежений набір графічних елементів. Другий пакет Swing реалізує власний Java-інтерфейс. Цей пакет створювався на основі AWT і має набагато більше можливостей та більшу кількість графічних елементів.. Swing-компоненти ще називають полегшеними (англ. lightweight), оскільки вони написані повністю на Java і тому платформонезалежні.
Існують також сторонні пакети, найпопулярнішим є Standard Widget Toolkit (SWT, вимовляється «ес-дабл-ю-ті») — Стандартний інструментарій віджетів. Розроблений підрозділом Rational фірми IBM і компанією Object Technology International (OTI), зараз розвивається фондом Eclipse.
Див. також
Примітки
- Gosling and McGilton (May 1996). The Java Language Environment. Архів оригіналу за 12 травня 2013. Процитовано 8 квітня 2009.
- J. Gosling, B. Joy, G. Steele, G. Brachda. The Java Language Specification, 2nd Edition. Архів оригіналу за 12 травня 2013. Процитовано 8 квітня 2009.
- . Архів оригіналу за 5 січня 2009. Процитовано 8 квітня 2009.
{{}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title () - Іноді трапляється "німецька" вимова "Ява".
- Different Isn't Always Better, But Better's Always Different [ 2009-09-05 у Wayback Machine.]
- The Java History Timeline [ 11 лютого 2010 у Wayback Machine.]. Офіційний сайт www.java.com
- IEEE Spectrum опублікувала рейтинг найпопулярніших мов програмування 2023 року. // Автор: Артем Житкевич. 30.08.2023
- . Архів оригіналу за 23 січня 2013. Процитовано 2 січня 2017.
- . Архів оригіналу за 19 грудня 2008. Процитовано 8 січня 2009.
{{}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title () - . Архів оригіналу за 7 червня 2010. Процитовано 13 липня 2010.
- . Oracle. Архів оригіналу за 31 березня 2018. Процитовано 23 квітня 2018.
- John K. Waters (21 березня 2018). . ADT Mag. Архів оригіналу за 27 березня 2018. Процитовано 27 березня 2018.
- Chander, Sharat. Introducing Java SE 11. oracle.com. оригіналу за 26 вересня 2018. Процитовано 26 вересня 2018.
- . ZDnet. 19 березня 2020. Архів оригіналу за 19 березня 2020. Процитовано 25 березня 2020.
- Mullin, Joe. «Google guilty of infringement in Oracle trial; future legal headaches loom» [ 8 травня 2012 у Wayback Machine.]
- Joe Mullin (31.05.2012). «Google wins crucial API ruling, Oracle's case decimated» [ 2 червня 2012 у Wayback Machine.]. Ars Technica.
- . Архів оригіналу за 1 серпня 2010. Процитовано 2 вересня 2010.
- Feigenbaum, Barry. SWT, Swing or AWT: Which is right for you? (21.02.2006). Архів оригіналу за 12.05.2013. Процитовано 2 вересня 2010.
Література
- Кей С. Хорстманн (2014). Java SE 8. Вводный курс. «Вільямс». ISBN .
- Фрэд Лонг та ін. (2014). Руководство для программиста на Java: 75 рекомендаций по написанию надежных и защищенных программ. «Вільямс». ISBN .
{{}}
: Явне використання «та ін.» у:|автор=
() - Кей С. Хорстманн, Гари Корнелл (2013). Java. Библиотека профессионала, том 1. Основы. 9-е издание. «Вільямс». ISBN .
- Барри Берд (2013). Программирование на Java для чайников, 3-е издание. . ISBN .
- Bruce Eckel (2006). Thinking in Java (4th Edition). Prentice Hall PTR. ISBN .
- Joshua Bloch (2008). Effective Java (2nd Edition). Prentice Hall PTR. ISBN .
- James Gosling; Bill Joy, Guy Steele, Gilad Bracha (2005). The Java Language Specification, Third Edition. Addison-Wesley. ISBN .
Посилання
- Домашня сторінка Java [ 16 грудня 2019 у Wayback Machine.]
- Java для розробників [ 29 жовтня 2019 у Wayback Machine.]
- Java Language Specification 3rd Edition [ 29 лютого 2012 у Wayback Machine.]
- Java: Історія з середини [ 5 листопада 2015 у Wayback Machine.]
- На Java дуже сильно вплинув Objective-C [ 13 липня 2011 у Wayback Machine.]
- Сага про Java [ 26 березня 2013 у Wayback Machine.]
- Історія Java [ 20 грудня 2015 у Wayback Machine.]
- Довга подорож в Java [ 27 грудня 2012 у Wayback Machine.]
- (вільний документ з Open University)
- Перелік мов програмування для Java Virtual Machine [Архівовано 21 серпня 2011 у WebCite]
Це незавершена стаття про мови програмування. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
U Vikipediyi ye statti pro inshi znachennya cogo termina JLS znachennya Java vimovlyayetsya Dzhava ob yektno oriyentovana mova programuvannya vipushena 1995 roku kompaniyeyu Sun Microsystems yak osnovnij komponent platformi Java Z 2009 roku movoyu zajmayetsya kompaniya Oracle yaka togo roku pridbala Sun Microsystems V oficijnij realizaciyi Java programi kompilyuyutsya u bajt kod yakij pri vikonanni interpretuyetsya virtualnoyu mashinoyu dlya konkretnoyi platformi JavaParadigma ob yektno oriyentovana strukturna imperativnaData poyavi 1995Tvorci Sun Microsystems OracleRozrobnik Oracle CorporationOstannij reliz Java SE 21 0 1 17 zhovtnya 2023 7 misyaciv tomu 2023 10 17 Sistema tipizaciyi statichna suvora bezpechna nazivna yavnaOsnovni realizaciyi virtualni mashini JavaPid vplivom vid Objective C C Smalltalk Eiffel Ada 83 Vplinula na C D J Ada 2005 ECMAScript Groovy PHP Scala JavaScriptOperacijna sistema MultiplatformnaLicenziya GNU General Public License Java Community ProcessZvichajni rozshirennya fajliv java class jar jad abo jmodVebsajt Oficijna storinka angl Instrukciyi u Vikipidruchniku Mediafajli u Vikishovishi Oracle nadaye kompilyator Java ta virtualnu mashinu Java yaki zadovolnyayut specifikaciyi Java Community Process pid licenziyeyu GNU General Public License Mova znachno zapozichila sintaksis iz C i C Zokrema vzyato za osnovu ob yektnu model S prote yiyi modifikovano Usunuto mozhlivist poyavi deyakih konfliktnih situacij sho mogli viniknuti cherez pomilki programista ta polegsheno sam proces rozroblennya ob yektno oriyentovanih program Ryad dij yaki v S C povinni zdijsnyuvati programisti dorucheno virtualnij mashini Peredusim Java rozroblyalas yak platformo nezalezhna mova tomu vona maye menshe nizkorivnevih mozhlivostej dlya roboti z aparatnim zabezpechennyam sho v porivnyanni napriklad z C zmenshuye shvidkist roboti program Za neobhidnosti takih dij Java dozvolyaye viklikati pidprogrami napisani inshimi movami programuvannya Java vplinula na rozvitok en sho rozroblyalas kompaniyeyu Microsoft Robotu nad J bulo zupineno cherez sudovij pozov Sun Microsystems oskilki cya mova programuvannya bula modifikaciyeyu Java Piznishe v novij platformi Microsoft NET vipustili J shob polegshiti migraciyu programistiv J abo Java na novu platformu Z chasom nova mova programuvannya S stala osnovnoyu movoyu platformi perejnyavshi bagato chogo z Java J vostannye vklyuchavsya v versiyu Microsoft Visual Studio 2005 Mova scenariyiv JavaScript maye shozhu iz Java nazvu i sintaksis ale ne pov yazana iz Java NazvaSpochatku mova nazivalasya Oak dub i rozroblyalasya Dzhejmsom Goslingom dlya programuvannya pobutovih elektronnih pristroyiv Zgodom vona bula perejmenovana v Java i stala vikoristovuvatisya dlya napisannya kliyentskih zastosunkiv i servernogo programnogo zabezpechennya Nazvana na chest marki kavi Java yaka v svoyu chergu otrimala najmenuvannya odnojmennogo ostrova Yava tomu na oficijnij emblemi movi zobrazhena chashka z parkoyu kavoyu Isnuye j insha versiya pohodzhennya nazvi movi pov yazana z alyuziyeyu na kavo mashinu yak priklad pobutovogo ustatkuvannya dlya programuvannya yakogo spochatku mova stvoryuvalasya IstoriyaMova programuvannya Java zarodilasya v 1991 r v laboratoriyah kompaniyi Sun Microsystems Rozrobku proyektu zapochatkuvav Dzhejms Gosling sam proyekt mav nazvu Green Zelenij Stvorennya pershoyi robochoyi versiyi yaka mala nazvu Oak dub zajnyalo 18 misyaciv Oskilki viyavilos sho im ya Oak uzhe vikoristovuvalos inshoyu firmoyu to v rezultati trivalih superechok navkolo nazvi novoyi movi z pomizh ryadu zaproponovanih bulo vibrano nazvu Java u 1995 r movu bulo oficijno perejmenovano Golovnim motivom stvorennya Java bula potreba v movi programuvannya yaka b ne zalezhala vid platformi tobto vid arhitekturi i yaku mozhna bulo b vikoristovuvati dlya stvorennya programnogo zabezpechennya sho vbudovuyetsya v riznomanitni pobutovi elektronni priladi taki yak mobilni zasobi zv yazku pristroyi distancijnogo keruvannya tosho Dosit skoro majzhe vsi najpopulyarnishi togochasni veboglyadachi otrimali mozhlivist zapuskati bezpechni dlya sistemi Java apleti vseredini vebstorinok U grudni 1998 r Sun Microsystems vipustila Java 2 spershu pid nazvoyu J2SE 1 2 de bulo realizovano dekilka konfiguracij dlya riznih tipiv platform Napriklad J2EE priznachalasya dlya stvorennya korporativnih zastosunkiv a znachno urizana J2ME dlya priladiv z obmezhenimi resursami takih yak mobilni telefoni U 2006 roci v marketingovih cilyah versiyi J2 bulo perejmenovano u Java EE Java ME ta Java SE vidpovidno 13 listopada 2006 roku Sun vipustili bilshu chastinu Java yak vilne ta vidkrite programne zabezpechennya zgidno z umovami GNU General Public License GPL 8 travnya 2007 korporaciya zakinchila proces v rezultati yakogo vsi pochatkovi kodi Java buli vipushenni pid GPL za vinyatkom nevelikoyi chastini kodu na yakij Sun ne mala avtorskogo prava Period stanovlennya Java zbigsya u chasi z rozkvitom mizhnarodnoyi informacijnoyi sluzhbi World Wide Web Cya obstavina vidigrala virishalnu rol u majbutnomu Java oskilki Web tezh vimagala platformo nezalezhnih program Yak naslidok buli zmisheni akcenti v rozrobci Sun z pobutovoyi elektroniki na programuvannya dlya Internet V 2023 roci u kategoriyi najpopulyarnishih mov programuvannya sered IT specialistiv zgidno rejtingu IEEE Spectrum yakij ohoplyuvav 59 mov programuvannya top 5 viglyadav tak Python Java C C JavaScript Golovni koncepciyiPochatkovi cili U stvorenni movi programuvannya Java bulo p yat pochatkovih cilej Sintaksis movi povinen buti prostim ob yektno oriyentovnim ta zvichnim Realizaciya maye buti bezvidmovnoyu ta bezpechnoyu Povinna zberegtisya nezalezhnist vid arhitekturi ta perenosnist Visoka produktivnist vikonannya Mova maye buti interpretovanoyu bagatopotokovoyu iz dinamichnim zv yazuvannyam moduliv Platforma Pid nezalezhnistyu vid arhitekturi mayetsya na uvazi te sho programa napisana na movi Java pracyuvatime na bud yakij pidtrimuvanij aparatnij chi sistemnij platformi bez zmin u pochatkovomu kodi ta perekompilyaciyi Cogo mozhna dosyagti kompilyuyuchi pochatkovij Java kod u bajt kod yakij ye sproshenimi mashinnimi komandami Potim programu mozhna vikonati na bud yakij platformi sho maye vstanovlenu virtualnu mashinu Java yaka interpretuye bajtkod u kod pristosovanij do specifiki konkretnoyi operacijnoyi sistemi i procesora Zaraz virtualni mashini Java isnuyut dlya bilshosti procesoriv i operacijnih sistem Standartni biblioteki zabezpechuyut zagalnij sposib dostupu do takih platformozalezhnih osoblivostej yak obrobka grafiki bagatopotokovist ta robotu z merezhami U deyakih versiyah zadlya zbilshennya produktivnosti JVM bajt kod mozhna kompilyuvati u mashinnij kod do abo pid chas vikonannya programi Osnovna perevaga vikoristannya bajt kodu ce portativnist Tim ne mensh dodatkovi vitrati na interpretaciyu oznachayut sho interpretovani programi budut majzhe zavzhdi pracyuvati povilnishe nizh skompilovani u mashinnij kod i same tomu Java oderzhala reputaciyu povilnoyi dzherelo movi Prote cej rozriv suttyevo skorotivsya pislya vvedennya dekilkoh metodiv optimizaciyi u suchasnih realizaciyah JVM Odnim iz takih metodiv ye just in time kompilyaciya JIT sho peretvoryuye bajt kod Java u mashinnij pid chas pershogo zapusku programi a potim keshuye jogo U rezultati taka programa zapuskayetsya i vikonuyetsya shvidshe nizh prostij interpretovanij kod ale cinoyu dodatkovih vitrat na kompilyaciyu pid chas vikonannya Skladnishi virtualni mashini takozh vikoristovuyut dinamichnu rekompilyaciyu yaka polyagaye v tomu sho virtualna mashina analizuye povedinku zapushenoyi programi j vibirkovo rekompilyuye ta optimizuye pevni yiyi chastini Z vikoristannyam dinamichnoyi rekompilyaciyi mozhna dosyagti bilshogo rivnya optimizaciyi nizh za statichnoyi kompilyaciyi oskilki dinamichnij kompilyator mozhe robiti optimizaciyi na bazi znan pro dovkillya periodu vikonannya ta pro zavantazheni klasi Do togo zh vin mozhe viyavlyati tak zvani garyachi tochki angl hot spots chastini programi najchastishe vnutrishni cikli yaki zajmayut najbilshe chasu pri vikonanni JIT kompilyaciya ta dinamichna rekompilyaciya zbilshuye shvidkist Java program ne vtrachayuchi pri comu portativnosti Isnuye she odna tehnologiya optimizaciyi bajtkodu shiroko vidoma yak statichna kompilyaciya abo kompilyaciya ahead of time AOT Cej metod peredbachaye yak i tradicijni kompilyatori bezposerednyu kompilyaciyu u mashinnij kod Ce zabezpechuye horoshi pokazniki v porivnyanni z interpretaciyeyu ale za rahunok vtrati perenosnosti skompilovanu takim sposobom programu mozhna zapustiti tilki na odnij cilovij platformi Shvidkist oficijnoyi virtualnoyi mashini Java znachno pokrashilasya z momentu vipusku rannih versij do togo zh deyaki viprobuvannya pokazali sho produktivnist JIT kompilyatoriv u porivnyanni zi zvichajnimi kompilyatorami u mashinnij kod majzhe odnakova Prote efektivnist kompilyatoriv ne zavzhdi svidchit pro shvidkist vikonannya skompilovanogo kodu tilki retelne testuvannya mozhe viyaviti spravzhnyu efektivnist u danij sistemi Ob yektnist Na protivagu C Java ye bilsh ob yektno oriyentovanoyu Vsi dani i diyi grupuyutsya v klasi ob yektiv Viklyuchennyam z povnoyi ob yektnosti yak skazhimo v Smalltalk ye primitivni tipi int float tosho Ce bulo svidomim rishennyam proyektuvalnikiv movi zadlya zbilshennya shvidkosti Cherez ce Java ne vvazhayetsya povnistyu ob yektno oriyentovnoyu movoyu U Java vsi ob yekti ye pohidnimi vid golovnogo ob yekta vin nazivayetsya prosto Object z yakogo voni uspadkovuyut bazovu povedinku i vlastivosti Hocha u C vpershe stalo dostupne mnozhinne uspadkuvannya ale u Java mozhlive tilki odinarne uspadkuvannya zavdyaki chomu viklyuchayetsya mozhlivist konfliktiv mizh chlenami klasu metodi i zminni yaki uspadkovuyutsya vid bazovih klasiv Bezpeka U namirah proyektuvalnikiv Java mala zaminiti C ob yektnogo nastupnika movi C Proyektuvalniki pochali z analizu vlastivostej C yaki ye prichinoyu najbilshogo chisla pomilok shobi stvoriti prostu bezpechnu i bezvidmovnu movu programuvannya V Java isnuye sistema vinyatkiv abo situacij koli programa zustrichayetsya z neochikuvanimi trudnoshami napriklad operaciyi nad elementom masivu poza jogo mezhami abo nad porozhnim elementom chitannya z nedostupnogo katalogu abo nepravilnoyi adresi URL vvid nedopustimih danih koristuvachem Odna z osoblivostej koncepciyi virtualnoyi mashini polyagaye v tomu sho pomilki viklyuchennya ne prizvodyat do povnogo krahu sistemi Krim togo isnuyut instrumenti yaki priyednuyutsya do seredovisha periodu vikonannya i kozhen raz koli stalosya pevne viklyuchennya zapisuyut informaciyu z pam yati dlya znevadzhennya programi Ci instrumenti en nadayut osnovnu informaciyu shodo viklyuchen v programah na Java Prote movu programuvannya Java ne rekomenduyetsya vikoristovuvati v sistemah zbij v roboti yakih mozhe prizvesti do smerti travm chi znachnih fizichnih ushkodzhen napriklad programne zabezpechennya dlya keruvannya atomnimi elektrostanciyami polotami sistem zhittyezabezpechennya chi sistem ozbroyennya cherez nenadijnist program napisanih na movi programuvannya Java punkt licenziyi Microsoft 7 7 h Avtomatichne keruvannya pam yattyu Div takozh Zbirannya smittya Java vikoristovuye avtomatichnij zbirach smittya GC Garbage Collector dlya keruvannya pam yattyu pid chas zhittyevogo ciklu ob yekta Programist virishuye koli stvoryuvati ob yekti a virtualna mashina vidpovidalna za zvilnennya pam yati pislya togo yak ob yekt staye nepotribnim Koli do pevnogo ob yekta vzhe ne zalishayetsya posilan zbirach smittya mozhe avtomatichno pribirati jogo iz pam yati Prote vitik pam yati vse zh mozhe statisya yaksho kod napisanij programistom maye posilannya na vzhe nepotribni ob yekti napriklad na ob yekti sho zberigayutsya u diyuchih kontejnerah Zbirannya smittya dozvolene u bud yakij chas V ideali vono vidbuvayetsya pid chas bezdiyalnosti programi Zbirka smittya avtomatichno forsuyetsya pri nestachi vilnoyi pam yati v kupi dlya rozmishennya novogo ob yekta sho mozhe prizvoditi do kilkasekundnogo zavisannya Tomu isnuyut realizaciyi virtualnoyi mashini Java z pribiralnikom smittya specialno stvorenim dlya programuvannya sistem realnogo chasu Java ne maye pidtrimki vkazivnikiv u stili C C Ce zrobleno zadlya bezpeki j nadijnosti abi dozvoliti zbirachu smittya peremishuvati vkazivnikovi ob yekti Priklad programiPrograma yaka vivodit Hello World public class HelloWorld public static void main String args System out println Hello World Programa yaka chitaye odin ryadok tekstu z klaviaturi ta vivodit jogo na ekran public class ReadData public static void main String args throws Exception String line char c while c char System in read 1 amp amp c n line c System out println line VipuskiDokladnishe Istoriya versij Java JDK 1 0 23 sichnya 1996 JDK 1 1 19 zhovtnya 1997 dodano vnutrishni klasi JavaBeans JDBC RMI pererobleno podiyi AWT J2SE 1 2 Playground 4 grudnya 1998 podil na 3 redakciyi J2SE Java 2 Platform Standard Edition J2EE Java 2 Platform Enterprise Edition J2ME Java 2 Platform Micro Edition strictfp Swing JIT compiler Collections J2SE 1 3 Kestrel 8 travnya 2000 J2SE 1 4 0 Merlin 13 lyutogo 2002 J2SE 5 0 1 5 0 Tiger 29 veresnya 2004 zdijsneno istotnu dorobku movi Dodano ryad elementiv napriklad cikl for each ob yektne predstavlennya prostih tipiv ta in Takozh zmineno princip numeraciyi versij Java SE 6 1 6 0 Mustang 11 grudnya 2006 1 4 lipnya 2007 u Wayback Machine Java SE 7 1 7 0 Dolphin 28 lipnya 2011 Java SE 8 1 8 0 neformalna nazva Spider 18 bereznya 2014 sered inshogo dodano pidtrimku lyambda viraziv Java SE 9 21 veresnya 2017 Z cogo roku proyekt perejshov na vipusk novoyi versiyi platformi sho 6 misyaciv kozhnogo bereznya ta kozhnogo veresnya Java SE 10 20 bereznya 2018 Cej reliz stav relizom z novimi funkciyami angl feature release ta prijshov na zaminu relizu 9 Java SE 11 25 veresnya 2018 vijshov reliz z trivaloyu pidtrimkoyu angl long term support LTS Java 14 19 bereznya 2020 roku bula predstavlena versiya dlya rozrobnikiv Cya versiya uvibrala v sebe 16 propozicij do pokrashennya angl Java enhancement proposals Bulo polipsheno vzayemodiyu z kodom na C ta C Java 15 15 veresnya 2020 Java 16 16 bereznya 2021 Java 17 17 0 5 18 zhovtnya 2022 vijshla versiya Java 19 19 0 1 reliz 18 zhovtnya 2022 Ostanni relizi 17 sichnya 2023 versiyi 19 0 2 17 0 6 11 0 18 8u361 21 bereznya 2023 persha versiya Java 20 Feature 20 19 veresnya 2023 persha versiya Java 21 21 0 1 17 zhovtnya 2023 ostannya najnovisha versiya Java 21 21 0 2 Struktura Java programiProgrami na Java utvoreni z viznachen klasiv ta interfejsiv Klasi mistyat zminni ta konstanti yaki utrimuyut dani metodi yaki vikonuyut diyi ta konstruktori yaki stvoryuyut ekzemplyari klasiv ob yekti Dani mozhut mati prostij tip napriklad bajt cile chislo simvol abo buti posilannyam na ob yekt Mova Java ye statichno tipizovanoyu Leksichna struktura Java programi zapisuyutsya v Yunikodi takozh nadayetsya leksichne peretvorennya yake dozvolyaye zapisuvati simvoli Yunikodu kerivnimi kodami Unicode za dopomogoyu lishe mnozhini simvoliv ASCII Mova Java predstavlyaye tekst poslidovnostyami 16 bitnih kodovih odinic vikoristovuyuchi koduvannya UTF 16 Za vinyatkom komentariv identifikatoriv ta vmistu simvolnih ta ryadkovih literaliv vsi vhidni elementi programi na Java skladayutsya iz simvoliv ASCII abo vidpovidnih yim kerivnih kodiv Unicode Tipi danih Java ye suvoro tipizovanoyu movoyu kozhna zminna ta viraz maye tip vidomij na etapi kompilyaciyi Tipi danih Java nalezhat do dvoh kategorij prosti primitive ta vkazivnikovi reference Do prostih tipiv nalezhit bulevij logichnij tip chislovi tipi ta simvolnij tip Chislovi tipi skladayutsya iz cilih tipiv byte short int long ta dijsnih tipiv float double Simvolnij tip predstavlenij tipom char Vkazivnikovi tipi skladayutsya iz klasiv interfejsiv masiviv Znachennyam vkazivnikovogo tipu ye vkazivnik na ob yekt ekzemplyar klasu chi masivu Ryadki ye ob yektami klasu String Prosti tipi danih Tip Dovzhina v bajtah Diapazon abo nabir znachenboolean ne viznacheno true falsebyte 1 128 127char 2 0 216 1 abo 0 65535short 2 215 215 1 abo 32768 32767int 4 231 231 1 abo 2147483648 2147483647long 8 263 263 1 abo priblizno 9 2 1018 9 2 1018float 4 2 2 23 2127 2 2 23 2127 abo priblizno 3 4 1038 3 4 1038 a takozh displaystyle infty displaystyle infty NaNdouble 8 2 2 52 21023 2 2 52 21023 abo priblizno 1 8 10308 1 8 10308 a takozh displaystyle infty displaystyle infty NaNKritikaDokladnishe Oskilki Java programi vikonuyutsya virtualnoyu mashinoyu Java to ce prizvodit do desho nizhchoyi shvidkodiyi porivnyano z samogo pochatku skompilovanimi u mashinnij kod programami napriklad napisanimi na S Prote za ostannye desyatilittya rozrobniki virtualnoyi mashini znachno prishvidshili cej proces tozh v danij chas programi na Java ne nadto postupayutsya analogam na S Inshoyu problemoyu Java ye te sho dlya nizkorivnevogo programuvannya dlya roboti z aparatnim zabezpechennyam vse zh neobhidno vikoristovuvati moduli napisani na inshih bilsh pristosovanih dlya cogo movah programuvannya toj zhe S Dlya standartnih zadach yak to robota iz portami komp yutera dlya Java uzhe isnuyut gotovi storonni native biblioteki Programi yaki vikoristovuyut platformno zalezhni moduli uzhe ne ye nastilki portabelnimi i potrebuyut shob dani moduli buli realizovani dlya riznih sistem She odniyeyu z gruntovnih problem Java ye bezpeka Java apletiv specialnih program na Java sho mozhut vbudovuvatisya u vebstorinki Shopravda ostanni tak i ne nabuli znachnoyi populyarnosti v interneti postupivshis inshim analogichnim tehnologiyam yak to flesh tehnologiya Vikoristannya inshimi kompaniyamiAndroid shiroko vikoristovuye tehnologiyi JavaGoogle Pri stvorenni Android operacijnoyi sistemi z vidkritim kodom Google vzyala za osnovu Java Nezvazhayuchi na te sho operacijna sistema zbudovana na yadri Linux bula napisana perevazhno na C Android SDK vikoristovuye Java dlya rozrobki zastosunkiv dlya platformi Android 7 travnya 2012 roku sud San Francisko viyaviv sho yaksho API mozhe buti zahishene avtorskim pravom to Google vikoristovuyuchi Java v Android porushiv avtorski prava Oracle Bulo pidnyate pitannya pro pravovij status vikoristannya Java v Android pristroyah Odnak vzhe 31 travnya togo zh roku federalnij suddya SShA postanoviv sho API ne mozhut buti zahishenimi avtorskim pravom Grafichnij interfejs koristuvachaDlya realizaciyi grafichnogo interfejsu GUI v Java isnuyut tri osnovni paketi klasiv Abstract Window Toolkit AWT Swing JavaFX Perevagami pershogo ye prostota vikoristannya interfejs podibnij do interfejsu operacijnoyi sistemi ta desho krasha shvidkodiya oskilki bazuyetsya na zasobah OS shopravda maye obmezhenij nabir grafichnih elementiv Drugij paket Swing realizuye vlasnij Java interfejs Cej paket stvoryuvavsya na osnovi AWT i maye nabagato bilshe mozhlivostej ta bilshu kilkist grafichnih elementiv Swing komponenti she nazivayut polegshenimi angl lightweight oskilki voni napisani povnistyu na Java i tomu platformonezalezhni Isnuyut takozh storonni paketi najpopulyarnishim ye Standard Widget Toolkit SWT vimovlyayetsya es dabl yu ti Standartnij instrumentarij vidzhetiv Rozroblenij pidrozdilom Rational firmi IBM i kompaniyeyu Object Technology International OTI zaraz rozvivayetsya fondom Eclipse Div takozhDalvik Virtualna mashina Java Paralelizm v Java Spisok zarezervovanih sliv movi Java J2EE kontejner Nashorn Java Modeling LanguagePrimitkiGosling and McGilton May 1996 The Java Language Environment Arhiv originalu za 12 travnya 2013 Procitovano 8 kvitnya 2009 J Gosling B Joy G Steele G Brachda The Java Language Specification 2nd Edition Arhiv originalu za 12 travnya 2013 Procitovano 8 kvitnya 2009 Arhiv originalu za 5 sichnya 2009 Procitovano 8 kvitnya 2009 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite web title Shablon Cite web cite web a Obslugovuvannya CS1 Storinki z tekstom archived copy yak znachennya parametru title posilannya Inodi traplyayetsya nimecka vimova Yava Different Isn t Always Better But Better s Always Different 2009 09 05 u Wayback Machine The Java History Timeline 11 lyutogo 2010 u Wayback Machine Oficijnij sajt www java com IEEE Spectrum opublikuvala rejting najpopulyarnishih mov programuvannya 2023 roku Avtor Artem Zhitkevich 30 08 2023 Arhiv originalu za 23 sichnya 2013 Procitovano 2 sichnya 2017 Arhiv originalu za 19 grudnya 2008 Procitovano 8 sichnya 2009 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite web title Shablon Cite web cite web a Obslugovuvannya CS1 Storinki z tekstom archived copy yak znachennya parametru title posilannya Arhiv originalu za 7 chervnya 2010 Procitovano 13 lipnya 2010 Oracle Arhiv originalu za 31 bereznya 2018 Procitovano 23 kvitnya 2018 John K Waters 21 bereznya 2018 ADT Mag Arhiv originalu za 27 bereznya 2018 Procitovano 27 bereznya 2018 Chander Sharat Introducing Java SE 11 oracle com originalu za 26 veresnya 2018 Procitovano 26 veresnya 2018 ZDnet 19 bereznya 2020 Arhiv originalu za 19 bereznya 2020 Procitovano 25 bereznya 2020 Mullin Joe Google guilty of infringement in Oracle trial future legal headaches loom 8 travnya 2012 u Wayback Machine Joe Mullin 31 05 2012 Google wins crucial API ruling Oracle s case decimated 2 chervnya 2012 u Wayback Machine Ars Technica Arhiv originalu za 1 serpnya 2010 Procitovano 2 veresnya 2010 Feigenbaum Barry SWT Swing or AWT Which is right for you 21 02 2006 Arhiv originalu za 12 05 2013 Procitovano 2 veresnya 2010 LiteraturaKej S Horstmann 2014 Java SE 8 Vvodnyj kurs Vilyams ISBN 978 5 8459 1900 7 Fred Long ta in 2014 Rukovodstvo dlya programmista na Java 75 rekomendacij po napisaniyu nadezhnyh i zashishennyh programm Vilyams ISBN 978 5 8459 1897 0 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite book title Shablon Cite book cite book a Yavne vikoristannya ta in u avtor dovidka Kej S Horstmann Gari Kornell 2013 Java Biblioteka professionala tom 1 Osnovy 9 e izdanie Vilyams ISBN 978 5 8459 1869 7 Barri Berd 2013 Programmirovanie na Java dlya chajnikov 3 e izdanie ISBN 978 5 8459 1834 5 Bruce Eckel 2006 Thinking in Java 4th Edition Prentice Hall PTR ISBN 978 0131872486 Joshua Bloch 2008 Effective Java 2nd Edition Prentice Hall PTR ISBN 978 0321356680 James Gosling Bill Joy Guy Steele Gilad Bracha 2005 The Java Language Specification Third Edition Addison Wesley ISBN 0 321 24678 0 PosilannyaJava u sestrinskih VikiproyektahPortal Programuvannya Teksti u Vikipidruchniku Fajli u Vikishovishi Domashnya storinka Java 16 grudnya 2019 u Wayback Machine Java dlya rozrobnikiv 29 zhovtnya 2019 u Wayback Machine Java Language Specification 3rd Edition 29 lyutogo 2012 u Wayback Machine Java Istoriya z seredini 5 listopada 2015 u Wayback Machine Na Java duzhe silno vplinuv Objective C 13 lipnya 2011 u Wayback Machine Saga pro Java 26 bereznya 2013 u Wayback Machine Istoriya Java 20 grudnya 2015 u Wayback Machine Dovga podorozh v Java 27 grudnya 2012 u Wayback Machine vilnij dokument z Open University Perelik mov programuvannya dlya Java Virtual Machine Arhivovano 21 serpnya 2011 u WebCite Ce nezavershena stattya pro movi programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi